It provides all required functionality for push and pull style processing of data in a stream model, and it also also enables optimizations in memory handling, minimizing buffer copying but with full optional multi threading support, with negligable overhead.
The basic paradigm is taken from the Unix Shell pipe notation, where you might write:
crypt <file.txt | compress | tar >out.tar
but you can also write, for example,
tar <file.txt | crypt | compress >out.z
The programs above are semi-ficticious, it's just to demonstrate the principle whereby input sources, such as a file can be redirected into a processing program, which sends it on, where it can be connected to another processing program, or to a final destination.
I've frequently wanted to use the same principle for programming purposes in C++, but with minimal overhead and supporting different programming models. So I wrote this package.