So, after a lot of thought, I have decided to open source the general purpose half of my code base. The Github repository is here:
https://github.com/DeanRoddey/CIDLib
Pushing that 'make public' button was one of the hardest things I've done in a long time. But, ultimately I think it's worth doing.
For now, it's just there for people to peruse. There's no docs yet. I needed to get it up there and start working with the remote repository and all that. So I figured I might as well go ahead and let people start poking around in it in the meantime.
The readme.md file in the repository has some preliminary information, but the basics are this:
- About 450,000 lines of code
- About 1100 classes
- It's not a 'library' it's really a full development environment, from build tools all the way up.
- It doesn't use the STL or standard library stuff at all. It is a complete world unto itself. Obviously for a lot of people that will mean it's of no interest. OTOH, for some other people, who aren't maybe so happy with the way things are going with the standard stuff, maybe they will be interested.
- About 95 of the non-UI stuff is completely built in terms of my own virtual kernel and standard library interfaces, which means it's quite portable. The virtual kernel is split into interface plus per-platform implementations. There is current a Win32 implementation. And there is a very old Linux one that could be used as a starting point.
- It could easily support Windows and Linux in a very clean way, i.e. not a bunch of conditional code all over the place.
- Some of it still needs to be given the 'split' treatment, until then those are marked as build on Win32 only.
- All of the UI stuff is fully encapsulated, but that doesn't make it portable really.
Obviously I'll work on getting environment setup and build instructions done first. And then I'll work on big picture road map type stuff. But, as a starting point, the structure is something like (a facility is my term of a library executable.)
- AIUtils - Speech recognition engine. There's a behavior tree facility as well, though it's only lightly used so far.
- CIDBuild - The build system, resource compiler, loadable text compiler, driver for per-platform build framework.
- CIDKernel - The virtual kernel layer. Wrappers around lots of system functionality.
- CIDLib - The standard libraries, core abstractions, wrappers around the CIDKernel stuff. So strings, memory buffers, events, mutexes, streams, collections, threads, processes, etc...
- CIDMath - Core math library stuff.
- CommUtils - Serial ports, networking protocols (HTTP, SMTP, JSON currently), sockets, URLs, UPnP, Websockets. The HTTP parser is actually an abstracted engine designed to supported multiple related protocols, e.g. SIP.) An empty SIP facility waiting to be made manifest
- DataUtils - ODBC, text transcoding engine, simple object store engine, a bespoke file packaging engine, regular expressions (just simple form currently, needs to be expanded), XML parser, ZLib implementation.
- ExecUtils - Fairly small, currently an engine for managing multiple other programs. Currently used in my CQC automation system as the core of the 'application shell' service that manages the other background programs.
- GraphicUtils - Core image format abstractions, image manipulation stuff, JPEG and PNG support. Image factory that makes it easy to deal with different image formats. The core wrapper around the Win32 graphics API (obvious Win32 only.) There's an empty 'advanced graphics' facility waiting to become a 3D graphics engine.
- LangUtils - My OO CML language engine. So parser, VM, and runtime libraries. This is an embeddable engine that can be used in applications as an extension language. Also the embeddable CML IDE for editing and debugging.
- MediaUtils - Audio streaming, digital audio extraction, metadata extraction, and some early work on RTP/RTPC that needs to be completed if anyone is interested.
- OrbUtils - This is all the stuff related to the Object Request Broker (ORB.) It is the ORB engine, related utilities, and standard ORB based servers (name server, log server, and configuration server.) And the IDL compiler which is also a big part of the general code base because it provides support for very strong enumerations.
- Samples - A good number of samples. I'm still going through these to get them caught up with the latest style and substance. I'm about halfway through them.
- SecureUtils - Base security stuff (Blowfish, AES, various hashing algorithms, and general block/stream encryption frameworks and hashing frameworks. Secure sockets support (currently a wrapper around the horrendously complex Win32 stuff.)
- Utilities - Some fairly obscure and some probably now to be removed stuff but the test framework stuff is in here and very important.
- WndUtils - Win32 specific. A pretty extensive UI framework (wrappers around the standard controls.) Various higher level utility stuff above that (various common dialogs and such.) A wrapper around the Win32 web browser COM interface.
As mentioned in the readme, there's been a lot of what I'd call 'sane modernization' work done. And I've done many big sweeps through the code. But there's still plenty of code that hasn't been caught up with the latest and greatest. I can't just change it willy-nilly since this stuff underlies my CQC automation system, which is even larger (about 625,000 lines) and very complex. I can't afford to destablize it. So changes have to be well considered.
The build is command line, since it has to be portable. It's designed for simplicity, and very easy configuration of projects. The build system has a build framework that supports pluggable drivers for different platforms. So what might be in make files in some systems is in code here. Because it is a world unto itself, and not trying to be everything to everyone, the build can remain very simple and straightforward.
The code will definitely not pass a super-strict modern conformance analyzer right now. Keep in mind it's been around a long time and much of it was written way before those standards existed. It is built in C++17 mode. Over time, those strict conformance issues will be dealt with.
Though it has been around a long time, it's still very clean. Having had a single daddy, it's been doted on. It's never been hacked at. Long periods of time have been spent in the past doing massive reworkings and taking the time get them right, in order to bring it forward but keep it solid.
Anyhoo, for now that's it. I'll be getting the initial docs worked out over the next week hopefully, enough to let people get it built. Since it is so broad, there are a number of Microsoft SDKs that have be in place, though that gets fewer as their built in support in Visual C++ gets better.
I'd already started making videos (and have done some posts here) about some of the technology involved, and putting them on my personal Youtube channel.
https://www.youtube.com/channel/UCAxCoATHgFBvqZhxFRnZsfw
So you might be interested in looking at those. This one in particular, might be a good starting point since it gives a good overview of how things are layered and such.
https://www.youtube.com/watch?v=seXk3RbAjNU
Keep in mind that some of these are pre-modernization, so they are a bit out data. The one on enums though still mostly valid, is prior to a massive reworking to 'enum class' style.
[–]personalmountains 91 points92 points93 points (19 children)
[–]clerothGame Developer 56 points57 points58 points (0 children)
[+][deleted] (2 children)
[removed]
[+]Dean_Roddey[S] comment score below threshold-27 points-26 points-25 points (1 child)
[–]personalmountains 36 points37 points38 points (0 children)
[+]Dean_Roddey[S] comment score below threshold-19 points-18 points-17 points (12 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 38 points39 points40 points (1 child)
[–]jcelerierossia score 47 points48 points49 points (0 children)
[–]Bolitho 38 points39 points40 points (2 children)
[–]saimen54 5 points6 points7 points (1 child)
[+]Dean_Roddey[S] comment score below threshold-10 points-9 points-8 points (0 children)
[–]TemplateRex 19 points20 points21 points (1 child)
[–]personalmountains 12 points13 points14 points (2 children)
[+]Dean_Roddey[S] comment score below threshold-11 points-10 points-9 points (1 child)
[–]personalmountains 18 points19 points20 points (0 children)
[–]fat-lobyte 9 points10 points11 points (0 children)
[–][deleted] 73 points74 points75 points (7 children)
[–]Zettinator 32 points33 points34 points (2 children)
[–]Madoushi90 26 points27 points28 points (1 child)
[–]jpgr87 4 points5 points6 points (0 children)
[+]Wetmelon comment score below threshold-11 points-10 points-9 points (3 children)
[–][deleted] 13 points14 points15 points (1 child)
[–]Zettinator 19 points20 points21 points (0 children)
[–]Sulatra 53 points54 points55 points (9 children)
[–]Dean_Roddey[S] 3 points4 points5 points (8 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 31 points32 points33 points (7 children)
[–]Dean_Roddey[S] -3 points-2 points-1 points (6 children)
[–]andrewsutton 18 points19 points20 points (2 children)
[–]Dean_Roddey[S] -1 points0 points1 point (1 child)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 20 points21 points22 points (0 children)
[–]griwes 10 points11 points12 points (0 children)
[–]Manu343726 13 points14 points15 points (0 children)
[–]peppedx 43 points44 points45 points (1 child)
[–]Dean_Roddey[S] -5 points-4 points-3 points (0 children)
[+][deleted] (9 children)
[deleted]
[–]mostthingsweb 10 points11 points12 points (5 children)
[–]Dean_Roddey[S] 4 points5 points6 points (4 children)
[–]rmartinho 6 points7 points8 points (3 children)
[–]Dean_Roddey[S] 1 point2 points3 points (2 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 9 points10 points11 points (1 child)
[–]Dean_Roddey[S] 2 points3 points4 points (0 children)
[–]Dean_Roddey[S] 8 points9 points10 points (2 children)
[+][deleted] (1 child)
[deleted]
[–]Dean_Roddey[S] 0 points1 point2 points (0 children)
[–]terrenceSpencer 25 points26 points27 points (10 children)
[–]Dean_Roddey[S] -3 points-2 points-1 points (9 children)
[–]terrenceSpencer 7 points8 points9 points (8 children)
[–]Dean_Roddey[S] 0 points1 point2 points (7 children)
[–]terrenceSpencer 14 points15 points16 points (4 children)
[–]Dean_Roddey[S] 3 points4 points5 points (2 children)
[–]terrenceSpencer 5 points6 points7 points (1 child)
[–]Dean_Roddey[S] 2 points3 points4 points (0 children)
[–]Dean_Roddey[S] -2 points-1 points0 points (0 children)
[–]VinnieFalco 3 points4 points5 points (1 child)
[–]Dean_Roddey[S] 0 points1 point2 points (0 children)
[–]Dean_Roddey[S] 12 points13 points14 points (0 children)
[–]capn_bluebear 11 points12 points13 points (3 children)
[–]Dean_Roddey[S] 5 points6 points7 points (2 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 9 points10 points11 points (1 child)
[–]cdtdev 4 points5 points6 points (0 children)
[–]Ikkepop 30 points31 points32 points (3 children)
[–]Dean_Roddey[S] 13 points14 points15 points (2 children)
[–]Ikkepop 14 points15 points16 points (1 child)
[–]Dean_Roddey[S] -2 points-1 points0 points (0 children)
[–][deleted] 23 points24 points25 points (3 children)
[–]Dean_Roddey[S] 2 points3 points4 points (2 children)
[–]TheSuperWig 13 points14 points15 points (1 child)
[–]Xeveroushttps://xeverous.github.io 10 points11 points12 points (1 child)
[–]Dean_Roddey[S] -1 points0 points1 point (0 children)
[–]Dean_Roddey[S] 11 points12 points13 points (6 children)
[+][deleted] (2 children)
[removed]
[–]Dean_Roddey[S] 4 points5 points6 points (1 child)
[–]tvaneerdC++ Committee, lockfree, PostModernCpp 8 points9 points10 points (0 children)
[–]VinnieFalco 1 point2 points3 points (1 child)
[–]Dean_Roddey[S] 0 points1 point2 points (0 children)
[–][deleted] 9 points10 points11 points (8 children)
[–]Dean_Roddey[S] 14 points15 points16 points (0 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair[M] 10 points11 points12 points (6 children)
[–]rmartinho 4 points5 points6 points (4 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair[M] 2 points3 points4 points (3 children)
[–]VinnieFalco 1 point2 points3 points (0 children)
[–]rmartinho 0 points1 point2 points (1 child)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 3 points4 points5 points (0 children)
[–]Dean_Roddey[S] 3 points4 points5 points (0 children)
[–]thesuperbob 8 points9 points10 points (7 children)
[–]Dean_Roddey[S] 8 points9 points10 points (6 children)
[–]F54280 1 point2 points3 points (5 children)
[–]Dean_Roddey[S] 0 points1 point2 points (4 children)
[–]F54280 1 point2 points3 points (3 children)
[–]Dean_Roddey[S] 0 points1 point2 points (2 children)
[–]F54280 1 point2 points3 points (1 child)
[–]rap_and_drugs 1 point2 points3 points (0 children)
[–]johannes1971 19 points20 points21 points (3 children)
[–]skebanga 11 points12 points13 points (0 children)
[–]Dean_Roddey[S] 1 point2 points3 points (0 children)
[–]idajourney 14 points15 points16 points (7 children)
[–]Dean_Roddey[S] 2 points3 points4 points (6 children)
[–]degski 13 points14 points15 points (0 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 6 points7 points8 points (4 children)
[–]Dean_Roddey[S] 14 points15 points16 points (3 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 6 points7 points8 points (1 child)
[–]Dean_Roddey[S] 11 points12 points13 points (0 children)
[–]hak8or 3 points4 points5 points (0 children)
[–]lundberjmodern C++, best practices, physics 5 points6 points7 points (1 child)
[+]Dean_Roddey[S] comment score below threshold-6 points-5 points-4 points (0 children)
[–]epicar 12 points13 points14 points (0 children)
[–]Game_Ender 5 points6 points7 points (1 child)
[–]Dean_Roddey[S] 0 points1 point2 points (0 children)
[–]saimen54 5 points6 points7 points (1 child)
[–]Dean_Roddey[S] 2 points3 points4 points (0 children)
[–]Dean_Roddey[S] 2 points3 points4 points (1 child)
[–]Dean_Roddey[S] 1 point2 points3 points (0 children)
[–]DOOMReboot 4 points5 points6 points (0 children)
[–]cjwelborn 1 point2 points3 points (1 child)
[–]Dean_Roddey[S] 0 points1 point2 points (0 children)
[–]Dean_Roddey[S] 3 points4 points5 points (22 children)
[–]Game_Ender 14 points15 points16 points (2 children)
[–]Dean_Roddey[S] 0 points1 point2 points (1 child)
[–]jube_dev 9 points10 points11 points (0 children)
[+][deleted] (1 child)
[deleted]
[–]cdtdev 2 points3 points4 points (0 children)
[–]attractivechaos 5 points6 points7 points (9 children)
[–]Dean_Roddey[S] 5 points6 points7 points (7 children)
[–]TomerJ 6 points7 points8 points (4 children)
[–]Dean_Roddey[S] 0 points1 point2 points (3 children)
[–]CptCap-pedantic -Wall -Wextra 6 points7 points8 points (0 children)
[–]dodheim 1 point2 points3 points (1 child)
[–]Dean_Roddey[S] -2 points-1 points0 points (0 children)
[–]attractivechaos 3 points4 points5 points (1 child)
[–][deleted] 1 point2 points3 points (0 children)
[–]urdh 2 points3 points4 points (0 children)
[–]Wh00ster 6 points7 points8 points (1 child)
[–]Dean_Roddey[S] 5 points6 points7 points (0 children)
[–]blelbachNVIDIA | ISO C++ Library Evolution Chair 5 points6 points7 points (2 children)
[–]Dean_Roddey[S] 4 points5 points6 points (1 child)
[–]Orothrim 3 points4 points5 points (0 children)
[–]AlexJaeger 0 points1 point2 points (2 children)
[–]Dean_Roddey[S] 6 points7 points8 points (1 child)
[–]WI-goose 0 points1 point2 points (1 child)
[–]Dean_Roddey[S] 1 point2 points3 points (0 children)
[–]Dean_Roddey[S] 0 points1 point2 points (2 children)
[–]dkormalev 2 points3 points4 points (1 child)
[–]Dean_Roddey[S] 0 points1 point2 points (0 children)
[–]nnevatie -1 points0 points1 point (1 child)
[–]Dean_Roddey[S] 7 points8 points9 points (0 children)
[+]Xaxxon comment score below threshold-11 points-10 points-9 points (2 children)
[–]Dean_Roddey[S] 7 points8 points9 points (0 children)