Utilities contains miscellaneous convenience functions for working with files, strings, memory, and other things. The following sets of functionality are included: - Allocator: A generic interface for a memory allocator. By default, calls malloc/calloc/realloc/free. - Arena: A memory allocator designed for non-fragmentation and ease of cleanup, particularly suited for small short-lived allocations - ArenaAllocator: An implementation of Allocator using an Arena object - AssociationLookup: A data structure for efficiently representing arbitrary associations between pairs of integers - AsyncTaskQueue: Multithreaded work dispatching - Atom: Pointer-comparable strings - AutoFreePool: Deferred memory deallocation - Base64: Encoding and decoding of quadrosexagesimal - ChunkArray: A data structure for organizing and indexing variable size data blobs within one contiguous allocation - EventDispatcher: Notification dispatch table - FileBundle: A simple container format for named and indexed chunks of data - FixedIntervalRunLoop: Mechanism for decoupling state updates from screen updates - IndexSelection: Set of unsigned ints with various operations suited for representing a multi-item selection in a list - IndexPairSelection: Equivalent of IndexSelection for pairs of related indexes - IOUtilities: Miscellaneous functions relating to memory and file I/O - Log: A centralized facility for customizable information logging - ObjectPool: A data structure for managing allocation and reuse of arbitrary objects - Queue: A simple data structure for managing an ordered list of pointers - Ranrot: Pseudo-random number generator (see also PCGRandom in gamemath for a potentially better one) - ReferenceCount: Pointer ownership tracking, invoking a callback when all owners have released the pointer - RingBuffer: An automatically-resizing circular buffer - SparseEnumerableArray: An unordered list of pointers made to be efficient for frequent addition and deletion of items - StableIndexArray: A resizable data array with constant time append, remove, and access operations, and stable item identifiers - StrideArray: A facility for managing a list of items with a specified size but an unspecified type - StringDiff: A way to represent a delta between two strings using at most one heap allocation - UndoTree: General mechanism for storing and traversing undo and redo states, optionally with branching timelines. Subclass UndoStateDelta and override revert() and apply() to implement. - UndoUtilities: List comparison for generating reversible lists of commands for adding, removing, and modifying items - UTFUtilities: Functions for working with Unicode text representations