/dranged

Pipeable CoRoutines, (Threaded) Generators, and Ranges in C++

Primary LanguageC++MIT LicenseMIT

                        DRANGED LIBRARY

OVERVIEW
========

The DRANGED library is my version of a Range Library that
will use the Border/Element design, Pipes/Pipelines, CoRoutine Generators and
possibly Threaded Generators.


The concepts I'm experimenting with are:

RANGES using Border/Element design pattern:
===========================================

The range is delimited by Borders (begin/end).

Each Border is an iterator and also has an element_before( )/element_after( ),
however it can't be derefenced.

The begin( ) border does not have an element_before( ), actually just undefined behaviour.
The end( ) border does not have an element_after( ), actually just undefined behaviour.

Each Element is an iterator and can also be deferenced to find the value of the element.  It has a border_before( )/border_after( ). A valid element always has a valid border_before( )/border_after( ).

++Element past end is undefined behaviour.
--Element before beginning is undefined behaviour.

Each Element can be tested as a bool, when returned from algorithms that return
Elements, to see if the alorithm found an element value.

For instance:

if ( auto element = find( myVec, 3 ) )
{
  // Do something if element found.
}

GENERATORS using COROUTINES
===========================

CoRoutines are now a part of the standard library and can be used now
on Linux, MacOS, and Windows.  They are encapsulated in Generators.

PIPES/PIPELINES
===============

A pipe is a single stage of a pipeline that does processing on and/or transforms
its input into an output.

Pipes can be combined together in a pipeline using the >>= operator.

Containers, Ranges and Generators can be used to put values into the start of
the pipeline.

There will be various classes to collect and process the results.

The first collection class is PushBack which just outputs to an STL container.