ExacTsoft C++ framework is kind of creature, that was born back in 2000s, when I realized, that products, I developed back there, need common functional codebase.
What was needed (click to unfold)
- Strict separation of non-visual, and visual (GUI) areas of functionality
- Some generic cross-platform implementations, for file primitives, for instance
- Extendability
- String class + its satellites, like I18N, locale, misc encoding converters, tokenizer, RegEx
- File, Path, etc. primitives
- Streams
- Basic XML support
- Math, advanced math
- Communications
- Reflection
- Scripting
The final framework structure, that crystallized from all that years in development, was like the following:
escore - All basic stuff, including reflection engine, date-time, string and support classes, powerful variant, extensible COM-like interface support, RegEx, files, streams, object serialization support. Many important classes are reflected.
escomm - Communication primitives. UARTs, FTDI direct driver control, Bluetooth, Bluetooth LE, Sockets. Channel abstractions, implemented over these different types of IO. All classes functionality is reflected.
esmath - Basic and advanced math classes, all reflected.
esscript - A scripting engine, configurable compiler, compiled 'binaries' serialization, virtual machine for execution. Script uses reflection to invoke all C++ functionality exposed from escore, escomm, esmath to be available from scripting language, with ability to load an additional binaries, or lightweight scriptlets, to be compiled on demand.
Script compiler is the only place, where boost is used :) I tried to eliminate all possible external dependencies everywhere else.
escore may be configured to use different RTLs, as needed, for instance it may use parts of Embarcadero RTL for some specific internal stuff, like ZIP compression-decompression, RegEx, etc. Otherwise, it may use boost implementation(s) of RegEx, like xpressive, if available, or the boost classic one. Otherwise, an internal ZLIB implementation may be used in escore.
The GUI framework part is development environment - specific, for instance, historically I used 4 GUI frameworks, under different conditions: MFC, wxWidgets, VCL, and, finally, Firemonkey.
The proverb says "one look is worth a thousand words", so here are small sample snippets related to miscellaneous aspects of ES framework usage. Scripting examples may be directly cut-and-pase into scripting host tool application, available for the download below, compiled, and executed right away.
ES script examples
NMEA0183 parser object
NMEA0183 parser object extension for MTK
ES script dynamic object layout example
ES script NXP ISP code excerpt
The current stable version documentation is here:
The current development version of ES scripting console is here:
Short ES script cookbook is here: