An architecture-agnostic package of discrete solutions to common problems in C++.
The library's main header (CppPotpourri.h) contains some basic things that I use as a premise elsewhere in the library. Mostly inlines for type-safe min/max functions.
There is also a type-code enum system in use in this library.
A library for dynamic string abstraction.
A data type for describing, parsing, and packing rich data types.
A template for a linked list.
A template for a priority queue.
A template for a ring buffer.
A template for vectors in 3-space.
A class to contain a mess of bitwise flags.
A class for implementing a stop watch from the platform's notion of microseconds.
A class for tracking power demands on hardware. Based roughly on android.os.PowerManager.WakeLock.
A class for encapsulating quaternions. Not as nice as Vector3 yet.
A collection of functions for common operations on UUIDs.
A library for dynamic-depth filtering of scalar and vector quantities.
A library for a configurable serial console.
An interface for representing and handling identities.
A template for implementing I/O queues in a hardware-agnostic manner.
A template to implement a preallocation pool for heap-resident objects.
A class conversion of minmea.
A hardware-agnostic abstraction for non-volatile storage.
A hard-fork of Adafruit's widespread graphics library with modifications to allow a frame buffer, and/or function as a software-only bitmap library.
An interchange interface and utility classes for exchange and processing of vector data.
These have no dependencies outside of those normally supplied by the environment.
- StringBuilder
- Quaternion
- Vector3
- LightLinkedList
- PriorityQueue
- RingBuffer
These have dependency on other classes in this repo...
ParsingConsole
|
+---StringBuilder
|
+---LightLinkedList
Identity
|
+---UUID
|
+---StringBuilder
|
+---LightLinkedList
Image
|
+---StringBuilder
SensorFilter<T>
|
+---StringBuilder
SensorFilter3<T>
|
+---StringBuilder
|
+---Vector3<T>
TripleAxisPipe
|
+---StringBuilder
|
+---SensorFilter3<float>
|
+---Vector3<T>
GPSWrapper
|
+---StringBuilder
ElementPool<T>
|
+---RingBuffer<T*>
BusQueue<T>
|
+---ElementPool<T>
|
+---PriorityQueue<T*>
|
+---StringBuilder
Storage
|
+---StringBuilder
StopWatch
|
+---StringBuilder
UUID
|
+---StringBuilder
KeyValuePair
|
+---StringBuilder
|
+---(see notes in KeyValuePair doc)
Documentation can be built with the supplied Doxyfile by running...
doxygen Doxyfile
Or...
~/CppPotpourri $ cd extras/doc/
~/CppPotpourri/extras/doc/ $ make
Doc will be output to extras/doc/doxygen
.
From the root of the repository, you can...
~/CppPotpourri $ cd extras/unit_tests/
~/CppPotpourri/extras/unit_tests/ $ make
An instrumented build of the unit tests will be created and executed. If the unit tests executed without failures, the output will then be left as HTML in CppPotpourri/extras/unit_tests/build/coverage
. Please file an issue if that isn't what happens.
NOTE: The build will be forced to 32-bit, so if you aren't capable of building and running 32-bit binaries on your 64-bit machine, please don't file an issue. The library does, in fact, pass all tests under 64-bit. But because most usage is on 32-bit MCUs, the type sizes and unit tests should reflect that use-case. You can force a 64-bit build by commenting out the -m32
line in the Makefile.
I will gladly examine all merge/pull requests. But you have to be ok with your contributed code being under this repo's license. You will be listed in the extras/doc/CONTRIB.md file.
- Hard-tabs are exterminated upon discovery, and replaced with two spaces. Inline commentary is unreadable otherwise.
- I have tried to remain within an 80-character horizontal ruling, but this sometimes hurts legibility.
- The ASCII-art banners in this repo was generated with this tool and is font "Slant" with all defaults. Uniformity of font face is optional, but the entire banner must be within
/**/
commentary delimiters to avoid confusing the compiler's parser/lexer with stray\
, or other unintentional escape sequences.
Original code is Apache 2.0.
Code adapted from others' work inherits their license terms, which were preserved in the commentary where it applies.