Extracted the file list functionality used for the opened and loaded file lists maintained by the filesystem module and encapsulated it in a new object named FileList.
Redesigned FileList into a random access container with an integral (shared) node object pool and a 64-element block allocator. A node pointer lookup table is used to allow for deferred allocation and dynamic resizing of the container without invalidating public node references. Lookup table allocation is also deferred.
Note that the public interface of FileList is not thread-safe. The intention is that concurrency should be addressed at a higher level.
The limited set of operations peformed on the list and their usage semantics means this model is near performance-optimal while still allowing public references to nodes in the form of opaque pointers.
Extracted the file list functionality used for the opened and loaded
file lists maintained by the filesystem module and encapsulated it
in a new object named FileList.
Redesigned FileList into a random access container with an integral
(shared) node object pool and a 64-element block allocator. A node
pointer lookup table is used to allow for deferred allocation and
dynamic resizing of the container without invalidating public node
references. Lookup table allocation is also deferred.
Note that the public interface of FileList is not thread-safe. The
intention is that concurrency should be addressed at a higher level.
The limited set of operations peformed on the list and their usage
semantics means this model is near performance-optimal while still
allowing public references to nodes in the form of opaque pointers.