Git Product home page Git Product logo

boolinq's Introduction

#boolinq 2.0

CI Status Coverage Status

C++ single-file header-only Ranges and LINQ template library

Just imagine LINQ support for STL/Qt collections :)

Get source code here: boolinq.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<T>()
  • 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<T>()

####Custom:

  • bytes()
  • bytes<ByteOrder>()
  • unbytes<T>()
  • unbytes<T,ByteOrder>()
  • bits()
  • bits<BitOrder>()
  • bits<BitOrder,ByteOrder>()
  • unbits()
  • unbits<BitOrder>()
  • unbits<T>()
  • unbits<T,BitOrder>()
  • unbits<T,BitOrder,ByteOrder>()

####Coming soon:

  • selectMany(lambda)

####May be will be:

  • gz()
  • ungz()
  • leftJoin
  • rightJoin
  • crossJoin
  • fullJoin

boolinq's People

Contributors

babelvit avatar gluttton avatar jell0nek avatar k06a avatar mmalcolm avatar parallaxe avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.