BitShares-Core  7.0.2
BitShares blockchain node software and command-line wallet software
Namespaces | Classes | Typedefs
fc::typelist Namespace Reference

This namespace contains the list type, and all of the operations and queries which can be performed upon it. More...

Namespaces

 impl
 
 runtime
 This namespace contains some utilities that provide runtime operations on typelists.
 

Classes

struct  builder
 
struct  invert_filter
 Template to invert a filter, i.e. filter<mylist, filter_inverter<myfilter>::type> More...
 
struct  list
 The actual list type. More...
 

Typedefs

template<typename List , template< typename... > class Delegate>
using apply = typename impl::apply< List, Delegate >::type
 Apply a list of types as arguments to another template. More...
 
template<typename... Lists>
using concat = typename impl::concat< Lists... >::type
 Concatenate two or more typelists together. More...
 
template<std::size_t count>
using make_sequence = typename impl::make_sequence< count >::type
 Create a list of sequential integers ranging from [0, count) More...
 
template<typename List , typename Transformer >
using transform = typename impl::transform< List, Transformer >::type
 Transform elements of a typelist. More...
 
template<typename... TypeLists>
using concat_unique = typename impl::concat_unique< list<>, TypeLists... >::type
 Remove duplicate items from one or more typelists and concatenate them all together. More...
 
template<typename List , std::size_t index>
using at = typename impl::at< List, index >::type
 Get the type at the specified list index. More...
 
template<typename List >
using first = at< List, 0 >
 Get the type at the beginning of the list. More...
 
template<typename List >
using last = at< List, length< List >() -1 >
 Get the type at the end of the list. More...
 
template<typename List , std::size_t index>
using remove_at = typename impl::remove_at< list<>, List, index >::type
 Get the list with the element at the given index removed. More...
 
template<typename List , typename Remove >
using remove_element = remove_at< List, index_of< List, Remove >()>
 Get the list with the given type removed. More...
 
template<typename List , template< typename > class Filter>
using filter = typename impl::filter< Filter, list<>, List >::type
 Get a list with all elements that do not pass a filter removed. More...
 
template<typename List , std::size_t start, std::size_t end = length<List>()>
using slice = typename impl::slice< list<>, List, start, end >::type
 Take the sublist at indexes [start, end) More...
 
template<typename ListA , typename ListB >
using zip = typename impl::zip< ListA, ListB >::type
 Zip two equal-length typelists together, i.e. zip<list<X, Y>, list<A, B>> == list<list<X, A>, list<Y, B>> More...
 
template<typename List >
using index = typename impl::zip< typename impl::make_sequence< length< List >()>::type, List >::type
 

Detailed Description

This namespace contains the list type, and all of the operations and queries which can be performed upon it.

Typedef Documentation

◆ apply

template<typename List , template< typename... > class Delegate>
using fc::typelist::apply = typedef typename impl::apply<List, Delegate>::type

Apply a list of types as arguments to another template.

Definition at line 142 of file typelist.hpp.

◆ at

template<typename List , std::size_t index>
using fc::typelist::at = typedef typename impl::at<List, index>::type

Get the type at the specified list index.

Definition at line 186 of file typelist.hpp.

◆ concat

template<typename... Lists>
using fc::typelist::concat = typedef typename impl::concat<Lists...>::type

Concatenate two or more typelists together.

Definition at line 150 of file typelist.hpp.

◆ concat_unique

template<typename... TypeLists>
using fc::typelist::concat_unique = typedef typename impl::concat_unique<list<>, TypeLists...>::type

Remove duplicate items from one or more typelists and concatenate them all together.

Definition at line 182 of file typelist.hpp.

◆ filter

template<typename List , template< typename > class Filter>
using fc::typelist::filter = typedef typename impl::filter<Filter, list<>, List>::type

Get a list with all elements that do not pass a filter removed.

Definition at line 205 of file typelist.hpp.

◆ first

template<typename List >
using fc::typelist::first = typedef at<List, 0>

Get the type at the beginning of the list.

Definition at line 190 of file typelist.hpp.

◆ index

template<typename List >
using fc::typelist::index = typedef typename impl::zip<typename impl::make_sequence<length<List>()>::type, List>::type

Add indexes to types in the list, i.e. index<list<A, B, C>> == list<list<0, A>, list<1, B>, list<2, C>> where 0, 1, and 2 are std::integral_constants of type std::size_t

Definition at line 225 of file typelist.hpp.

◆ last

template<typename List >
using fc::typelist::last = typedef at<List, length<List>()-1>

Get the type at the end of the list.

Definition at line 193 of file typelist.hpp.

◆ make_sequence

template<std::size_t count>
using fc::typelist::make_sequence = typedef typename impl::make_sequence<count>::type

Create a list of sequential integers ranging from [0, count)

Definition at line 154 of file typelist.hpp.

◆ remove_at

template<typename List , std::size_t index>
using fc::typelist::remove_at = typedef typename impl::remove_at<list<>, List, index>::type

Get the list with the element at the given index removed.

Definition at line 197 of file typelist.hpp.

◆ remove_element

template<typename List , typename Remove >
using fc::typelist::remove_element = typedef remove_at<List, index_of<List, Remove>()>

Get the list with the given type removed.

Definition at line 201 of file typelist.hpp.

◆ slice

template<typename List , std::size_t start, std::size_t end = length<List>()>
using fc::typelist::slice = typedef typename impl::slice<list<>, List, start, end>::type

Take the sublist at indexes [start, end)

Definition at line 216 of file typelist.hpp.

◆ transform

template<typename List , typename Transformer >
using fc::typelist::transform = typedef typename impl::transform<List, Transformer>::type

Transform elements of a typelist.

Definition at line 170 of file typelist.hpp.

◆ zip

template<typename ListA , typename ListB >
using fc::typelist::zip = typedef typename impl::zip<ListA, ListB>::type

Zip two equal-length typelists together, i.e. zip<list<X, Y>, list<A, B>> == list<list<X, A>, list<Y, B>>

Definition at line 220 of file typelist.hpp.