public static void Push(ref MiniSet set, object obj) { if (ReferenceEquals(set.value, null)) { set.value = obj; } else if (set.value is object[] array) { Debug.Assert(set.top <= array.Length); if (set.top == array.Length) { Array.Resize(ref array, array.Length * 2); set.value = array; } array[set.top++] = obj; } else { // upgrade _value to object[4] set.value = new[] { set.value, obj, null, null, }; set.top = 2; } }
void PopObject(object obj) { MiniSet.Pop(ref _recursion, obj); }