Super tiny C++11 single-file header-only LINQ template library
Just imagine .NET Framework LINQ support for STL/Qt collections :)
Get source code here: boolinq.h
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
.toStdVector();
// dst type: std::vector<int>
// dst items: 6,10struct 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; })
.toStdVector();
// dst type: std::vector<std::string>
// dst items: "Kevin", "Layer", "Agata"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 - C++: Native arrays, pairs of pointers
- STL: list, stack, queue, vector, deque, set, map, any compatible ....
- Qt: QList, QVector, QSet, QMap.
where(predicate),where_i(predicate)take(count),takeWhile(predicate),takeWhile_i(predicate)skip(count),skipWhile(predicate),skipWhile_i(predicate)orderBy(),orderBy(transform)distinct(),distinct(transform)append(items),prepend(items)concat(linq)reverse()cast<T>()
select(transform),select_i(transform)groupBy(transform)selectMany(transfom)
all(),all(predicate)any(),any(lambda)sum(),sum<T>(),sum(lambda)avg(),avg<T>(),avg(lambda)min(),min(lambda)max(),max(lambda)count(),count(value),count(predicate)contains(value)elementAt(index)first(),first(filter),firstOrDefault(),firstOrDefault(filter)last(),last(filter),lastOrDefault(),lastOrDefault(filter)toStdSet(),toStdList(),toStdDeque(),toStdVector()
bytes<T>(ByteDirection?)unbytes<T>(ByteDirection?)bits(BitsDirection?, BytesDirection?)unbits<T = unsigned char>(BitsDirection?, BytesDirection?)
- gz()
- ungz()
- leftJoin
- rightJoin
- crossJoin
- fullJoin