OpenBarnyard
 
Loading...
Searching...
No Matches
PTRBRelocations Class Reference

#include <PTRB.h>

Public Member Functions

 PTRBRelocations ()=default
 
void Write (Toshi::TTSFO &ttsfo, PTRBSections &sect, Endianess eEndianess)
 
void Read (Toshi::TTSFI &ttsfi, PTRBSections &sect, Endianess eEndianess)
 

Detailed Description

Definition at line 44 of file PTRB.h.

Constructor & Destructor Documentation

◆ PTRBRelocations()

PTRBRelocations::PTRBRelocations ( )
default

Member Function Documentation

◆ Read()

void PTRBRelocations::Read ( Toshi::TTSFI & ttsfi,
PTRBSections & sect,
Endianess eEndianess )
inline

Definition at line 810 of file PTRB.h.

811{
812 TUINT32 ptrCount = 0;
813 ttsfi.Read( &ptrCount );
814
815 ptrCount = CONVERTENDIANESS( eEndianess, ptrCount );
816
817 Toshi::TTRB::RELCEntry entry;
818 for ( TUINT32 i = 0; i < ptrCount; i++ )
819 {
820 ttsfi.Read( &entry );
821 entry.HDRX1 = CONVERTENDIANESS( eEndianess, entry.HDRX1 );
822 entry.HDRX2 = CONVERTENDIANESS( eEndianess, entry.HDRX2 );
823 entry.Offset = CONVERTENDIANESS( eEndianess, entry.Offset );
824
825 auto stack = sect.GetStack( entry.HDRX1 );
826 auto dataStack = sect.GetStack( entry.HDRX2 );
827 TUINT32 dataPtr = *(TUINT32*)( &stack->GetBuffer()[ entry.Offset ] );
828 stack->AddRelocationPtr( entry.Offset, dataPtr, dataStack );
829 }
830
831 for ( auto stack : sect )
832 {
833 stack->Link();
834 }
835}
uint32_t TUINT32
Definition Typedefs.h:13
PTRBSections::MemoryStream * GetStack(TUINT index)
Definition PTRB.h:1052

◆ Write()

void PTRBRelocations::Write ( Toshi::TTSFO & ttsfo,
PTRBSections & sect,
Endianess eEndianess )
inline

Definition at line 785 of file PTRB.h.

786{
787 TUINT32 ptrCount = 0;
788 for ( auto section : sect )
789 {
790 ptrCount += section->GetPointerCount();
791 }
792
793 ttsfo.Write( CONVERTENDIANESS( eEndianess, ptrCount ) );
794
795 for ( TUINT i = 0; i < sect.GetStackCount(); i++ )
796 {
797 auto section = sect.GetStack( i );
798
799 for ( auto& ptr : *section )
800 {
801 Toshi::TTRB::RELCEntry entry = {};
802 entry.HDRX1 = CONVERTENDIANESS( eEndianess, (TINT16)i );
803 entry.HDRX2 = CONVERTENDIANESS( eEndianess, (TINT16)ptr.DataStack->GetIndex() );
804 entry.Offset = CONVERTENDIANESS( eEndianess, ptr.Offset );
805 ttsfo.Write( entry );
806 }
807 }
808}
unsigned int TUINT
Definition Typedefs.h:8
int16_t TINT16
Definition Typedefs.h:14

The documentation for this class was generated from the following file: