Nano
A C++ template metaprogramming library
Class Hierarchy

Go to the graphical class hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically:
[detail level 12]
 Cnano::detail::accumulate< List, Iteration, StartIndex, EndIndex, Value, Operation >Like std::accumulate, where the start and end indices, and the accumulation functor can be specified
 Cnano::detail::accumulate< list< Head, Tail...>, Iteration, StartIndex, EndIndex, Value, Operation >
 Cnano::detail::accumulate< list< Tail...>, Iteration, StartIndex, EndIndex, Value, Operation >
 Cnano::add< Arg1, Arg2 >Addss two nano numeric types
 Cnano::args_list< Args >A list of arguments
 Cnano::detail::array_convert< Element >Converts an element to a std type, like nano::int_t to inr or a nano::list into a std::array with N elements
 Cnano::detail::array_convert< list< First, Rest...> >
 Cnano::both_found< Type1, Type2 >Checks if both types are found (have values != -1), in which case result is true, otherwise result is false
 Cnano::detail::build_range< Current, Step, Iteration, Continue, Values >Builds a range of nano::int_t types
 Cnano::detail::build_range< Current, Step, Iteration, false, list< nano::int_t< Values >...> >
 Cnano::detail::build_range< Current, Step, Iteration, true, list< nano::int_t< Values >...> >
 Cnano::equal_value< Type1, Type2 >Check if two types (which have value components) have the same value
 Cnano::eval< Expression, Arg >Evaluates an expression with arguments
 Cnano::eval< Expression, no_args >
 Cnano::eval< Function< Args...>, no_args >
 Cnano::expand< Expression, Arg, Expandable >Expands a list into its types
 Cnano::expand< Expression, Arg, false >
 Cnano::expand< Expression, Arg, true >
 Cnano::filter< Evaluator, List1, List2, Passed >Takes a list and an evaluation function, which itself takes the list and a parameter to evaluate if each element of the list must be filtered
 Cnano::filter< Evaluator, empty_list, list< Tail2...>, list< Passed...> >
 Cnano::filter< Evaluator, list< Head1, Tail1...>, list< Head2, Tail2...>, list< Passed...> >
 Cnano::find_common< List1, List2 >Finds all common elements in 2 lists and returns a zipped list of the result, where each zipped element is a index of the common element in the lists. The zips are sorted by the index of the element in the first list. For example, if there are 2 lists:

[ 0, 4, 2, 1 ] and [ 12, 1, 4, 2 ]

the returned list will be:

[ [1, 2], [2 ,3], [1, 2] ]
 Cnano::find_common< list< Head1, Tail1...>, list< Head2, Tail2...> >
 Cnano::find_type< Type, List >Find the index of a specific type in the list (the index of the first occurrence).
If the type is not found then the value 'parameter' will be -1
 Cnano::find_type< Type, list< Head, Tail...> >
 Cnano::find_type< Type, list< Type, Tail...> >
 Cnano::find_type< Type, list<> >
 Cnano::find_uncommon< List1, List2 >Finds all elements of the first list which are not present in the second list, and returns a new list without the common elements. For example, if there are 2 lists:

[ 2, 3, 1, 4 ] and [ 4, 5, 2 ]

the returned list will be:

[ 3, 1 ]
 Cnano::find_uncommon< list< Head1, Tail1...>, list< Head2, Tail2...> >
 Cnano::find_uncommon_indices< List1, List2 >Finds the indices of the elements in the first list which are not present in the second list and returns a list of the index values. For example, if there are 2 lists:

[ 2, 3, 1, 4 ] and [ 4, 5, 2 ]

the returned list will be:

[ 1, 3 ]
 Cnano::find_uncommon_indices< list< Head1, Tail1...>, list< Head2, Tail2...> >
 Cnano::first_not_present< Type, List >Just check if the first element of the list was found (searching should be done beforehand)
 Cnano::first_not_present< Type, list< Head, Tail...> >
 Cnano::detail::get< Index, List >Meta function to get an element from a list
 Cnano::detail::get< nano::size_t< Index-1 >, list< Tail...> >
 Cnano::detail::get< nano::size_t< Index >, list< Head, Tail...> >
 Cnano::identify< Type >Simply an identifier to identify meta types and meta functions
 Cnano::identify< Head >
 Cnano::detail::get< nano::size_t< 0 >, list< Head, Tail...> >
 Cnano::identify< list< Ts..., Us...> >
 Cnano::join< list< Ts...>, list< Us...> >
 Cnano::int_t< Value >Wrapper around int for static int types used by metaclass and metafunctions in nano
 Cnano::is_found< Type1, Type2 >Ths function is supposed to be used with the find functions on lists when searching through the list to find common or uncommon elements. It should be called by the zip HOF to determine if Type1 and Type2 should be zipped and added to the list of elements to return.

Please see the implementation of the find_common and zip functions for clarificaiton
 Cnano::join< List1, List2 >Joins two lists
 Cnano::list< Ts >Meta class that holds types, and allows functions to be applied to the elements of the list using the internal apply struct.

Usage:

using nano::dim; \ To get dimension types
using test_list = list<i, j, k, l>; \ A list of dimensions

using shifted_list = list::apply<shift>;

Where shift is some function which operates on a type in the list
 Cnano::multiplies< List, Current >Same as std::multiplies, but for a nano:list which can be computed at compile time - computes the product of the list elelents from the starting value
 Cnano::multiplies< empty_list, Current >
 Cnano::multiplies< list< Head, Tail...>, Current >
 Cnano::multiply< Arg1, Arg2 >Multiplies two nano numeric types
 Cnano::not_found< Type >Function to determine if and element is not found (has a value of -1)
 Cnano::pair< First, Second >Holds two elements
 Cnano::range< Start, End, Step >Constructs a range of nano::int_t t types, which is essentially just a list of nano::int_t types
 Cnano::runtime_converter< List >Wrapper class to provide the conversion functions for converting to runtime containers
 Cnano::runtime_converter< list< Head, Tail...> >
 Cnano::detail::search_lists< List1, List2 >For each element in the first list, the index of the element in the second list is searched for, if found it's added to a new list, otherwise -1 is added
 Cnano::detail::search_lists< list< Head1, Tail1...>, list< Head2, Tail2...> >
 Cnano::size_of< Container, Types >Gets the number of types in a container
 Cnano::size_of< Container< Types...> >
 Cnano::size_t< Value >Wrapper around size_t for static size_t types used by metaclass and metafunctions in nano
 Cnano::type_not_present< Type, List >To check if a type in a list is not found. Where the find_type tries to find a type and get its index to return, this function simply returns true of the type is not found, and false if the tpe is found
 Cnano::type_not_present< Type, list< Head, Tail...> >
 Cnano::type_not_present< Type, list< Type, Tail...> >
 Cnano::type_not_present< Type, list<> >
 Cnano::detail::vector_convert< Element >Same as convert, but uses vector's instead of arrays, so the performance is worse
 Cnano::detail::vector_convert< list< First, Rest...> >
 Cnano::zip< Evaluator, List1, List2, Passed >Takes two lists, and zips the corresponding elements into a list of 2 elements if the function to determine if the elements should be zips succeeds, otherwise the elements are not zipped
 Cnano::zip< Evaluator, empty_list, empty_list, list< Passed...> >
 Cnano::zip< Evaluator, list< Head1, Tail1...>, list< Head2, Tail2...>, list< Passed...> >