Menu

Home

Arlen Keshabyan

Welcome to the Relinx wiki!

Relinx Logo

Yet another .NET-like LINQ library that supports lazy evaluation (or evaluation on demand).
The Relinx library implements almost all .NET LINQ methods. Some of them are lazy and some of them are not.
Also, the library contains a couple of methods that are not standard LINQ methods.
The library uses forward-only iterators (input iterators) and can be used for single-linked lists (forward_list).
Source code contains doxygen blocks. So, some documentation can be generated using doxygen.

Important notes: The library uses the C++14 standard intensively. It was developed and successfully tested using MinGW / GCC 5.3.0, LLVM Clang 3.9.0 and MSVC++ 2015 (although, MSVC++ 2015 has some issues compiling unit tests that use complex lambdas).

The mapping of the .NET LINQ methods to Relinx methods:

 Aggregate           -> aggregate
 All                 -> all
                     -> none
 Any                 -> any
 AsEnumerable        -> from
 Avarage             -> avarage
 Cast                -> cast
 Concat              -> concat
 Contains            -> contains
 Count               -> count
                     -> cycle
 DefaultIfEmpty      -> default_if_empty
 Distinct            -> distinct
 ElementAt           -> element_at
 ElementAtOrDefault  -> element_at_or_default
 Empty               -> from
 Except              -> except
 First               -> first
 FirstOrDefault      -> first_or_default
                     -> for_each, for_each_i
 GroupBy             -> group_by
 GroupJoin           -> group_join
 Intersect           -> intersect_with
 Join                -> join
 Last                -> last
 LastOrDefault       -> last_or_default
 LongCount           -> count
 Max                 -> max
 Min                 -> min
 OfType              -> of_type
 OrderBy             -> order_by
 OrderByDescending   -> order_by_descending
 Range               -> range
 Repeat              -> repeat
 Reverse             -> reverse
 Select              -> select, select_i
 SelectMany          -> select_many, select_many_i
 SequenceEqual       -> sequence_equal
 Single              -> single
 SingleOrDefault     -> single_or_default
 Skip                -> skip
 SkipWhile           -> skip_while, skip_while_i
 Sum                 -> sum
 Take                -> take
 TakeWhile           -> take_while, take_while_i
 ThenBy              -> then_by
 ThenByDescending    -> then_by_descending
 ToArray             -> to_container, to_vector
 ToDictionary        -> to_map
 ToList              -> to_list
 ToLookup            -> to_multimap
                     -> to_string
 Union               -> union_with
 Where               -> where, where_i
 Zip                 -> zip

There is a mirror at CodePlex here (https://relinx.codeplex.com/) and at GitHub here (https://github.com/Ptomaine/Relinx)