BPatchEntry(void* P) : Ptr(reinterpret_cast<uintptr_t>(P)) {}
bool hasFinalPtr() const { return Ptr & 0x1 ? false : true; }
- void setFinalPtr(BPNode*& FreeList, void* P);
+ void setFinalPtr(BPNode*& FreeList, const void* P);
BPNode* getBPNode() const {
assert (!hasFinalPtr());
return *p;
}
+ void RegisterPtr(unsigned PtrId, const void* Ptr);
- void RegisterPtr(unsigned PtrId, void* Ptr);
+ void RegisterPtr(const void* Ptr) {
+ RegisterPtr(ReadInt(),Ptr);
+ }
private:
void ReadRecord();
buff.push_back('\0');
}
-void Deserializer::RegisterPtr(unsigned PtrId,void* Ptr) {
+void Deserializer::RegisterPtr(unsigned PtrId, const void* Ptr) {
BPatchEntry& E = BPatchMap[PtrId];
- assert (E.hasFinalPtr() && "Pointer already registered.");
+ assert (!E.hasFinalPtr() && "Pointer already registered.");
E.setFinalPtr(FreeList,Ptr);
}
return E.getFinalPtr();
}
-void Deserializer::BPatchEntry::setFinalPtr(BPNode*& FreeList, void* P) {
+void Deserializer::BPatchEntry::setFinalPtr(BPNode*& FreeList, const void* P) {
assert (!hasFinalPtr());
// Perform backpatching.