//~ Functions public void PushLooseObjectPtr(string UniqueID, long PositionToOffsetFrom = 0) { // create pointer ObjectPtr NewPtr = new ObjectPtr(); NewPtr.FileOffset = BaseStream.Position; NewPtr.BaseOffset = PositionToOffsetFrom; Debug.Assert(!ObjectPtrs.ContainsKey(UniqueID), "Cannot add duplicate key into the ObjectPtrs dictionary."); Write(-1); ObjectPtrs.Add(UniqueID, NewPtr); }
public void SolveLooseObjectPtr(string UniqueID) { Debug.Assert(ObjectPtrs.ContainsKey(UniqueID), "Cannot solve loose object if it doesn't exist."); // get ptr ObjectPtr ExistingPtr = ObjectPtrs[UniqueID]; // cache long CurrentPosition = BaseStream.Position; long ActualOffset = (BaseStream.Position - ExistingPtr.BaseOffset); // seek to old position and write new offset BaseStream.Position = ExistingPtr.FileOffset; Write((uint)ActualOffset); // return back to position BaseStream.Position = CurrentPosition; // remove ObjectPtrs.Remove(UniqueID); }