Oh code. That thing programmer's love.

Like many others, I too have a love for code. As such, I've built a variety of different libraries and projects in my spare time for fun.

So, the following code examples are just a few libraries that I've found to be extremely helpful. As with any other library, they are meant to do a few specific things, and to do them well. They are written entirely by me, and released into the Public Domain.

Libraries:
  • Parser - Download
    • As the name suggests, this library designed to help you read data from a file. It includes a variety of useful functionality including:
      • Built in smart File I/O
      • Extremely powerful built in lexical analyzer
      • 3 Search Algorithms (Linear, Globbing, RegEx)
      • Supports multiple Parser states
      • C version and a C++ wrapper
      • Lots of documentation
      • Several example drivers

  • Containers - Download
    • This is a collection of containers that I have come to love. These containers were written to operate on different principles then the STL, as well as to support several features that I desired (dll boundary safety is a big one). This pack includes:
      • CString - This is essentially a std::string replica, with a few additional features. The main reason this was written, was to ensure that it worked across dll boundaries. As such, about 90% of std::string was replicated, with some extra spice thrown in for good measures.
      • CVector - Somewhat similar interface to std::vector, except it has several performance enhancements. Most of this relies on raw memory copies when the vector grows and when elements are shifted. Plus, this class does not shift over all elements when you use erase(). Instead, it does the smart thing and overwrites the deleted element with the last element.
      • SCVector - Sorted version of the above, with quicksort, binary searches, and insertion sort capabilities.
      • VariantType - Oh the variant. It can be any standards single element data type, plus strings, with automatic conversion support and similar. It makes heavy use of the C++ syntax, namely operator overloading, and has made File I/O and scripting far easier to manage, with just a fraction of the code!
      • NamedVaraintType - Same as the above, but it includes a additional name parameter. Great for Key Value pairs!

      A few unit test drivers are included with the containers. This should help illustrate some of the features, while allowing you to verify their designed behavior.

  • ConfigFile - Download
    • XML and similar can by annoying. Tired of converting strings to the data type you want, or having to manually specify what a string holds? Have you given up on trying to find a easy to use and integrate configuration file library? Fret not! As the ConfigFile has come to save the day!


While libraries are great and all, they are useless by themselves. Tools, on the other hand, are designed to automate and simplify a variety of different things. As such, I've developed a few tools to increase my productivity.

Tools:
  • Directory Based Build System - Download
    • A variety of build system current exist on the market; however, they tend to force you to do additional work when ever you rename files, move stuff around, add directories, and so on. As such, I've built my own variation with an emphasis on as much automation as possible with the following features:
      • Minimum to no modifications to the config file when the project changes
      • Easy to modify configuration files
      • Support multiple configuration files with executable and library support
      • Automatic source file location
      • Automatic internal dependency resolution
      • Smart minimum rebuilding
      • Fast


Unlike the above libraries, the following projects were written specifically for a DigiPen class.

DigiPen Assignments