mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-14 02:33:53 +00:00
Added methods to batch emit and deserialize owned pointers. This allows
to group the pointer IDs together in the bitstream before their referenced contents (which will lend itself to more efficient encoding). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43845 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4542edcaa7
commit
6d8ab4ae81
@ -117,15 +117,15 @@ public:
|
||||
|
||||
template <typename T>
|
||||
inline T* ReadOwnedPtr(bool AutoRegister = true) {
|
||||
unsigned PtrId = ReadInt();
|
||||
unsigned PtrID = ReadInt();
|
||||
|
||||
if (PtrId == 0)
|
||||
if (!PtrID)
|
||||
return NULL;
|
||||
|
||||
T* x = SerializeTrait<T>::Materialize(*this);
|
||||
|
||||
|
||||
if (AutoRegister)
|
||||
RegisterPtr(PtrId,x);
|
||||
RegisterPtr(PtrID,x);
|
||||
|
||||
return x;
|
||||
}
|
||||
@ -135,6 +135,39 @@ public:
|
||||
Ptr = ReadOwnedPtr<T>(AutoRegister);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2>
|
||||
void BatchReadOwnedPtrs(T1*& P1, T2*& P2,
|
||||
bool A1=true, bool A2=true) {
|
||||
|
||||
unsigned ID1 = ReadInt();
|
||||
unsigned ID2 = ReadInt();
|
||||
|
||||
P1 = (ID1) ? SerializeTrait<T1>::Materialize(*this) : NULL;
|
||||
if (ID1 && A1) RegisterPtr(ID1,P1);
|
||||
|
||||
P2 = (ID2) ? SerializeTrait<T2>::Materialize(*this) : NULL;
|
||||
if (ID2 && A2) RegisterPtr(ID2,P2);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2, typename T3>
|
||||
void BatchReadOwnedPtrs(T1*& P1, T2*& P2, T3*& P3,
|
||||
bool A1=true, bool A2=true, bool A3=true) {
|
||||
|
||||
unsigned ID1 = ReadInt();
|
||||
unsigned ID2 = ReadInt();
|
||||
unsigned ID3 = ReadInt();
|
||||
|
||||
P1 = (ID1) ? SerializeTrait<T1>::Materialize(*this) : NULL;
|
||||
if (ID1 && A1) RegisterPtr(ID1,P1);
|
||||
|
||||
P2 = (ID2) ? SerializeTrait<T2>::Materialize(*this) : NULL;
|
||||
if (ID2 && A2) RegisterPtr(ID2,P2);
|
||||
|
||||
P3 = (ID3) ? SerializeTrait<T2>::Materialize(*this) : NULL;
|
||||
if (ID3 && A3) RegisterPtr(ID3,P3);
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
void ReadPtr(T*& PtrRef, bool AllowBackpatch = true) {
|
||||
ReadUIntPtr(reinterpret_cast<uintptr_t&>(PtrRef), AllowBackpatch);
|
||||
|
@ -54,6 +54,36 @@ public:
|
||||
EmitPtr(ptr);
|
||||
if (ptr) SerializeTrait<T>::Emit(*this,*ptr);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2>
|
||||
void BatchEmitOwnedPtrs(T1* p1, T2* p2) {
|
||||
EmitPtr(p1);
|
||||
EmitPtr(p2);
|
||||
if (p1) SerializeTrait<T1>::Emit(*this,*p1);
|
||||
if (p2) SerializeTrait<T2>::Emit(*this,*p2);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2, typename T3>
|
||||
void BatchEmitOwnedPtrs(T1* p1, T2* p2, T3* p3) {
|
||||
EmitPtr(p1);
|
||||
EmitPtr(p2);
|
||||
EmitPtr(p3);
|
||||
if (p1) SerializeTrait<T1>::Emit(*this,*p1);
|
||||
if (p2) SerializeTrait<T2>::Emit(*this,*p2);
|
||||
if (p3) SerializeTrait<T3>::Emit(*this,*p3);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2, typename T3, typename T4>
|
||||
void BatchEmitOwnedPtrs(T1* p1, T2* p2, T3* p3, T4& p4) {
|
||||
EmitPtr(p1);
|
||||
EmitPtr(p2);
|
||||
EmitPtr(p3);
|
||||
EmitPtr(p4);
|
||||
if (p1) SerializeTrait<T1>::Emit(*this,*p1);
|
||||
if (p2) SerializeTrait<T2>::Emit(*this,*p2);
|
||||
if (p3) SerializeTrait<T3>::Emit(*this,*p3);
|
||||
if (p4) SerializeTrait<T4>::Emit(*this,*p4);
|
||||
}
|
||||
|
||||
void FlushRecord() { if (inRecord()) EmitRecord(); }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user