//~ 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);
        }