// all sizes+addresses are in ints (4 bytes) sclass ManagedIntObjects_v1 { int[] memory = new int[0]; MultiMap freeList = treeMultiMap(); void ensureCapacity(int size) { if (memorySize() < size) setMemorySize(roundUpToPowerOfTwo(size)); } int memorySize() { ret memory.length; } void setMemorySize(int newSize) { int size = memorySize(); if (newSize < size) unimplemented("Shrinking memory"); addToFreeList(IntRange(size, newSize)); memory = resizeIntArray(memory, newSize); } void addToFreeList(IntRange r) { freeList.add(r.length(), r); } void growMemory() { setMemorySize(memorySize()*2); } int alloc(int length) { Int freeLength; while ((freeLength = freeList.data.ceilingKey(length)) == null) growMemory(); freeLength.get } }