CommonPP alternatives and similar libraries
Based on the "Miscellaneous" category.
Alternatively, view CommonPP alternatives based on common mentions on social networks and blogs.
-
ZXing
ZXing ("Zebra Crossing") barcode scanning library for Java, Android -
RE2
RE2 is a fast, safe, thread-friendly alternative to backtracking regular expression engines like those used in PCRE, Perl, and Python. It is a C++ library. -
ZBar
Clone of the mercurial repository http://zbar.hg.sourceforge.net:8000/hgroot/zbar/zbar -
American fuzzy lop
american fuzzy lop - a security-oriented fuzzer -
Serial Communication Library
Cross-platform, Serial Port library written in C++ -
Better Enums
C++ compile-time enum to string, iteration, in a single header file -
c-smart-pointers
Smart pointers for the (GNU) C programming language -
Experimental Boost.DI
C++14 Dependency Injection Library -
UNITS
a compile-time, header-only, dimensional analysis and unit conversion library built on c++14 with no dependencies. -
constexpr-8cc
Compile-time C Compiler implemented as C++14 constant expressions -
outcome
Provides very lightweight outcome<T> and result<T> (non-Boost edition) -
cxx-prettyprint
A header-only library for C++(0x) that allows automagic pretty-printing of any container. -
libcpuid
a small C library for x86 CPU detection and feature extraction -
kangaru
🦘 A dependency injection container for C++11, C++14 and later -
value-category-cheatsheet
A C++14 cheat-sheet on lvalues, rvalues, xvalues, and more -
StrTk
C++ String Toolkit Library https://www.partow.net/programming/strtk/index.html -
ub-canaries
collection of C/C++ programs that try to get compilers to exploit undefined behavior -
QtVerbalExpressions
This Qt lib is based off of the C++ VerbalExpressions library. [MIT] -
access_profiler
a tool to count accesses to member variables in c++ programs
InfluxDB - Power Real-Time Data Analytics at Scale
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of CommonPP or a related project?
README
CommonPP
commonpp
is a multi purpose library easing very few operations like:
- Getting metrics out of your program (counter, gauge, statistical description of sample);
- Naming your threads (and have the custom name appearing in
htop
,top
,gdb
); - Have a really simple thread pool on top of
boost::asio
; - Quick setup of
boost::log
; - …
License
I chose the BSD 2-clause license, so the library can be used in any project, however I'd appreciate any bug fix, pull request and comment.
Dependencies
commonpp
depends on Boost and TBB, a C++11 compiler and CMake to be built.
It builds on Mac OS X and Linux. It probably build on *BSD but I did not test
(yet).
Building
$> make cmake
$> make
$> make test
On windows
commonpp
can be built and used on windows. The prefered way is to use
vcpkg
.
The required dependencies can be installed using the following command:
$> .\vcpkg.exe install boost:x64-windows tbb:x64-windows hwloc:x64-windows
Then you can generate a Visual Studio solution giving the vcpkg toolchain file.
Please note that only VS2017 has been tested. Also, static TBB
installation
cannot be done, so the DLL will need to be in the path to execute binaries
depending on commonpp
.
Why?
Although Boost and TBB are very complete low-level libraries, there are still
basic features missing, the biggest being getting out metrics out of your code.
commonpp
will never replace Boost or TBB but instead adds some features that
integrate well.
Libraries
Core
The core part is mostly utility functions or class.
ExecuteOnScopeExit
: executes a callable on scope exit. It can be canceled;LoggingInterface
: It is a header containing several logging function on top ofboost::log
. Every record produced withcommonpp
is tagged so that it can be used in a project already usingboost::log
(thereforeinit_logging
should not be called).RandomValuePicker
: select a random value in a read only container;FloatingArithmeticTools
: Knuth's double comparison functions;Options
: an utility class working along with an enum to offer a simple interface to manage options, see [the test](tests/core/options.cpp);- There are several string functions to stringify, encode, join, or get a formatted date.
Thread
The thread library is quite small:
Thread.hpp
contains a function to get/set the current thread name;ThreadPool
is a class managing several threads calling theboost::asio::io_service::run
member function:- It can schedule a callable to be called periodically;
- It supports several
io_service
; - A function can be called on thread startup to setup any thread specific data;
Spinlock
: should be obviousThreadTimer
: it allows one to get the load of the current thread. This is experimental;
Metrics
This is the main reason this commonpp
exists. I often found myself struggling
to get metrics out of my code to monitor performances, behavior, resource
usage, etc. Most of the library counters are based on the RRD ones, the
ExponentiallyDecayingReservoir
is based on the implementation in Codahale as
well as the test.
Metrics.hpp
is the entry point of the metric library; one should use it to register counters;MetricTag
: This represents the metadata associated with a counter; for instance if you use Graphite, the tag will be converted in a path (concatenation of all the value separated by a point), if you use InfluxDB, it will be converted in a list of tag;MetricValue
: This holds the actual value(s) of a counter.
The counters
There are 3 types of counter:
Counter
orSharedCounter
should be used to represent a value that always increases and never goes back like a request counter. The actual value sent is the rate at which the counter increases. The SharedCounter can be shared among several thread safely.Gauge
: It represents an absolute value like a number of active connections.DescStat
: Associated with a reservoir, it will describe the distribution of the values, for instance, one can use a reservoir to push the time a functionX
takes to run, and theStatDesc
will give several information like the min, max, variance, quantile, mean, etc.
There is also a helper:
TimeScope
is an helper to measure the time we spent in the current scope.
Examples
There is a complete example how to use the metric library [here](examples/metrics/main.cpp)
The reservoirs
Currently only one is implemented: ExponentiallyDecayingReservoir
.
Documentation can be found
there.
The sinks
- Graphite: It sends a list of
MetricTag
andMetricValue
pair in a format understood by Graphite (actually Carbon). As stated before, the values are concatenated to form the metric path, therefore the order used to insert the tag is important. - InfluxDB: It sends the measure name along with all the tags and the value
as described in the documentation. The
MetricTag
andMetricValue
class were designed with InfluxDB primarely in mind.
Net
This library for now consist in a HTTP request generator and parser and URL encode and decode functions.
Next step
- Migrate my other project HTTPP to use commonpp;
- Add tests.
*Note that all licence references and agreements mentioned in the CommonPP README section above
are relevant to that project's source code only.