private void push(FoldableObjectToken info) { if (info == null) return; info.Size = info.Target.CurrentSize; info.State = info.Target.CurrentState; switch (info.State) { case FoldableObjectState.Active: Allocate(info.Size); _activeObjects.AddFirst(info); _totalActiveSize += info.Size; break; case FoldableObjectState.Folded: _packedObjects.AddFirst(info); break; case FoldableObjectState.NotRegistered: // ignore break; default: throw new InvalidOperationException(); } }
private void pop(FoldableObjectToken info) { if (info == null) return; switch (info.State) { case FoldableObjectState.Active: _activeObjects.Remove(info); _totalActiveSize -= info.Size; break; case FoldableObjectState.Folded: _packedObjects.Remove(info); break; case FoldableObjectState.NotRegistered: // ignore break; default: throw new InvalidOperationException(); } }