C++ header-only Ranges and LINQ template library
Just imagine LINQ support for STL/Qt collections :)
Let's talk about library here: boolinq google group
Get source code here: boolinq-all.h
###How it looks like?
####Example with integers:
int src[] = {1,2,3,4,5,6,7,8};
auto dst = from(src).where( [](int a){return a%2 == 1;}) // 1,3,5,7
.select([](int a){return a*2;}) // 2,6,10,14
.where( [](int a){return a>2 && a<12;}) // 6,10
.toVector();
// dst type: std::vector<int>
// dst items: 6,10
####Example with structs
struct Man
{
std::string name;
int age;
};
Man src[] =
{
{"Kevin",14},
{"Anton",18},
{"Agata",17},
{"Terra",20},
{"Layer",15},
};
auto dst = from(src).where( [](const Man & man){return man.age < 18;})
.orderBy([](const Man & man){return man.age;})
.select( [](const Man & man){return man.name;})
.toVector();
// dst type: std::vector<std::string>
// dst items: "Kevin", "Layer", "Agata"
####Interesting example
struct Message
{
std::string PhoneA;
std::string PhoneB;
std::string Text;
};
Message messages[] =
{
{"Anton","Troll","Hello, friend!"},
{"Denis","Wride","OLOLO"},
{"Anton","Papay","WTF?"},
{"Denis","Maloy","How r u?"},
{"Denis","Wride","Param-pareram!"},
};
int DenisUniqueContactCount =
from(messages).where( [](const Message & msg){return msg.PhoneA == "Denis";})
.distinct([](const Message & msg){return msg.PhoneB;})
.count();
// DenisUniqueContactCount == 2
###Containers supported?
-
C++: Native arrays, pairs of pointers
-
STL: list, stack, queue, vector, deque, set, map, any compatible ....
-
Qt: QList, QVector, QSet, QMap.
###Operators supported?
####Today:
cast() take(int) skip(int) concat(range) where(lambda) select(lambda) reverse() orderBy() orderBy(lambda) groupBy(lambda) distinct() distinct(lambda) for_each(lambda) all() all(lambda) any() any(lambda) sum() sum(lambda) avg() avg(lambda) min() min(lambda) max() max(lambda) count() count(lambda) contains(value) elementAt(int) toSet() toList() toDeque() toVector() toContainer() Custom:
bytes() bytes() unbytes() unbytes<T,ByteOrder>() bits() bits() bits<BitOrder,ByteOrder>() unbits() unbits() unbits() unbits<T,BitOrder>() unbits<T,BitOrder,ByteOrder>() Coming soon:
selectMany(lambda)
####May be will be:
gz() ungz() leftJoin rightJoin crossJoin fullJoin
###What are you waiting?
Would like to comment? - Let's go!
Would like to discuss? - Let's go!
Would like to participate? - Let's go!
--
Bukov Anton (k06a)