New collections library for Delphi – darkCollections
It’s no news to anyone following my blog, that my darkGlass game engine project has begun to generate some useful sub-components, which I’ve been releasing as open source libraries.
Over the past couple of months, I’ve been spending a lot of my free time to build out infrastructure for self-hosting the project sources, the build server, and organizing the project in such a way that the sub-components can be downloaded as their own self-contained libraries, or as part of the darkLibs collection.
Today, I decided to move one of those libraries to a ‘beta’ release status.
darkCollections began it’s life as a simple exercise in learning to use both interfaces and generics in the same libraries, and was copied into the darkGlass project from an earlier code base. This library contains a handful of useful collection interfaces which can be extended out through the use of generics to store collections of interfaces.
There are, of course, other collections libraries available for Delphi, and darkCollections is not yet the most feature rich of them. That said, the darkCollections library is already in heavy use through-out the darkGlass code base, and is also used heavily in some of my other code too.
Having added an ILinkedList interface to the collection over the past couple of evenings, today I decided to polish up the documentation a little and move the library to a ‘beta’ release status. This is the first of the darkLibs to gain a release version of any kind, and so I’m quite proud of the progress I’m making.
Three missing features
There are three features which did not make it into this release, but will be included in a future release.
- There is no pipe collection.
I’m not certain how necessary a pipe collection is, but it appears to be a common member of most collections libraries that I’ve seen, and so I’ll get around to adding one. That said, I’m sure a ring-buffer could make a stand-in for a pipe, and there’s a ring buffer in darkCollections.
- There is no sort method.
This is a bit of a biggie, there’s currently no sort method on the collection interfaces. I had intended to add one, making use of anonymous methods to provide the sorting condition, but I never did get around to it. The simple fact is that so far, none of my code has needed a sort method and so it didn’t get written. I’ve been able to get by quite nicely without it, but, that’s no excuse, it will be in a later revision.
- No samples.
There is documentation, and while not perfect, I’ve made every effort to add at least some description of each relevant interface, class, method and property in the library. There’s an included .chm file as well as the option to use the IDE’s on-the-fly documentation system. Never the less, I plan to add some samples before the library moves from Beta to Release.
Obtaining the library.
If you’d like to give darkCollections a try for yourself, there’s also another little piece of news.
Part of the reason for the infrastructure roll-out that I mentioned earlier, is that I plan to start up a little side business. This is by no means intended to replace my current employment, but rather, as a means to fund additional assistance on some of my projects. Nothing has been made official yet, but, I have soft-launched the website, and that’s where you’ll find the source for darkCollections:
darkCollections is here: https://digitalenvysoftware.com/open-source/darklibs/darkcollections/
Check out my other open source libraries (currently in pre-release): https://digitalenvysoftware.com/open-source/darklibs/
(Side Note: I’m still working on social network sign-in to the new website)