uTL
micro Template library
typelist.h File Reference

A template parameter "container". More...

#include <utl/core/impl.h>
#include <utl/meta/integral.h>
#include <utl/meta/detection.h>
#include <utl/meta/invoke.h>
#include <utl/meta/sfinae.h>

Go to the source code of this file.

Classes

struct  utl::meta::typelist< Ts >
 
struct  utl::meta::typelist< Ts >::cat_<... >
 
struct  utl::meta::typelist< Ts >::cat_< typelist< L1... >, typelist< L2... > >
 
struct  utl::meta::typelist< Ts >::times_< N, T >
 
struct  utl::meta::typelist< Ts >::times_< 1, T... >
 
struct  utl::meta::typelist< Ts >::times_< 0, T... >
 
struct  utl::meta::apply_impl::apply_< Fn, Seq >
 
struct  utl::meta::apply_impl::apply_< Fn, typelist< List... > >
 Sequence == typelist<> More...
 
struct  utl::meta::apply_impl::apply_< Fn, integer_sequence< T, Is... > >
 Sequence == integer_sequence<> More...
 
struct  utl::meta::at_impl::_add_pointer< T >
 
struct  utl::meta::at_impl::at_head_<... >
 
struct  utl::meta::at_impl::at_head_< typelist< voids... > >
 
struct  utl::meta::at_impl::at_< List, N >
 
struct  utl::meta::at_impl::at_< typelist< List... >, N >
 
struct  utl::meta::front_impl::front_< L >
 
struct  utl::meta::front_impl::front_< typelist< Head, Tail... > >
 
struct  utl::meta::back_impl::back_< List >
 
struct  utl::meta::back_impl::back_< typelist< Head, Tail... > >
 
struct  utl::meta::cat_impl::cat_< Lists >
 
struct  utl::meta::cat_impl::cat_<>
 
struct  utl::meta::cat_impl::cat_< typelist< L1... > >
 
struct  utl::meta::cat_impl::cat_< typelist< L1... >, typelist< L2... > >
 
struct  utl::meta::cat_impl::cat_< typelist< L1... >, typelist< L2... >, Ln... >
 
struct  utl::meta::fold_impl::fold_< typename, typename, typename >
 
struct  utl::meta::fold_impl::fold_< typelist< Head, Tail... >, V, Fn >
 
struct  utl::meta::fold_impl::fold_< typelist<>, V0, Fn >
 
struct  utl::meta::rev_fold_impl::rev_fold_< typename, typename, typename >
 
struct  utl::meta::rev_fold_impl::rev_fold_< typelist< Head, Tail... >, V, Fn >
 
struct  utl::meta::rev_fold_impl::rev_fold_< typelist< Tail >, V, Fn >
 
struct  utl::meta::rev_fold_impl::rev_fold_< typelist<>, V, Fn >
 
struct  utl::meta::reverse_impl::reverse_< List, V >
 
struct  utl::meta::pop_front_impl::pop_front_< List >
 
struct  utl::meta::pop_front_impl::pop_front_< typelist< Head, Tail... > >
 
struct  utl::meta::pop_back_impl::pop_back_< List >
 
struct  utl::meta::transform_impl::transform_< typename, typename >
 
struct  utl::meta::transform_impl::transform_< typelist< typelist< Ts... >, Fn >, void_t< invoke< Fn, Ts >... > >
 
struct  utl::meta::transform_impl::transform_< typelist< typelist< Ts0... >, typelist< Ts1... >, Fn >, void_t< invoke< Fn, Ts0, Ts1 >... > >
 
struct  utl::meta::transform_lazy_impl::transform_lazy_< typename, typename >
 
struct  utl::meta::transform_lazy_impl::transform_lazy_< typelist< typelist< Ts... >, Fn >, void_t< invoke< Fn, Ts >... > >
 
struct  utl::meta::transform_lazy_impl::transform_lazy_< typelist< typelist< Ts0... >, typelist< Ts1... >, Fn >, void_t< invoke< Fn, Ts0, Ts1 >... > >
 
struct  utl::meta::find_if_impl::find_if_< typename, typename, index_t >
 
struct  utl::meta::find_if_impl::find_if_< typelist< Head, Tail... >, Fn, N >
 
struct  utl::meta::find_if_impl::find_if_< typelist<>, Fn, N >
 
struct  utl::meta::seek_if_impl::seek_if_< typename, typename, index_t >
 
struct  utl::meta::seek_if_impl::seek_if_< typelist< Head, Tail... >, Fn, N >
 
struct  utl::meta::seek_if_impl::seek_if_< typelist<>, Fn, N >
 
struct  utl::meta::count_if_impl::count_if_< typename, typename, size_t >
 
struct  utl::meta::count_if_impl::count_if_< typelist< Head, Tail... >, Fn, N >
 
struct  utl::meta::count_if_impl::count_if_< typelist<>, Fn, N >
 
struct  utl::meta::filter_impl::filter_< typename, typename, typename >
 
struct  utl::meta::filter_impl::filter_< typelist< Head, Tail... >, Fn, L >
 
struct  utl::meta::filter_impl::filter_< typelist<>, Fn, L >
 
struct  utl::meta::replace_if_impl::replace_if_< typename, typename, typename, typename >
 
struct  utl::meta::replace_if_impl::replace_if_< typelist< Head, Tail... >, Fn, T, Ret >
 
struct  utl::meta::replace_if_impl::replace_if_< typelist<>, Fn, T, Ret >
 

Namespaces

 utl
 STL's core language concepts.
 
 utl::meta
 
 utl::meta::apply_impl
 
 utl::meta::at_impl
 
 utl::meta::front_impl
 
 utl::meta::back_impl
 
 utl::meta::cat_impl
 
 utl::meta::fold_impl
 
 utl::meta::rev_fold_impl
 
 utl::meta::reverse_impl
 
 utl::meta::pop_front_impl
 
 utl::meta::pop_back_impl
 
 utl::meta::transform_impl
 
 utl::meta::transform_lazy_impl
 
 utl::meta::find_if_impl
 
 utl::meta::seek_if_impl
 
 utl::meta::count_if_impl
 
 utl::meta::filter_impl
 
 utl::meta::replace_if_impl
 

Typedefs

template<typename List >
using utl::meta::size = size_< List::size()>
 
template<typename List >
using utl::meta::empty = bool_< List::empty()>
 
template<typename T1 , typename T2 >
using utl::meta::pair = typelist< T1, T2 >
 
template<typename T >
using utl::meta::at_impl::add_pointer = eval< _add_pointer< T > >
 
template<typename List , typename... Ts>
using utl::meta::push_front = eval< apply< bind_front< quote< typelist >, Ts... >, List > >
 
template<typename List , typename... Ts>
using utl::meta::push_back = eval< apply< bind_back< quote< typelist >, Ts... >, List > >
 
template<typename List , typename Pred >
using utl::meta::all_of = if_< empty< List >, false_, empty< filter< List, compose< quote< not_ >, Pred > > > >
 
template<typename List , typename Pred >
using utl::meta::any_of = not_< empty< filter< List, Pred > > >
 
template<typename List , typename Pred >
using utl::meta::none_of = empty< filter< List, Pred > >
 
template<size_t N, typename ... Ts>
using utl::meta::repeat_c = typename typelist< Ts... >::template times< N >
 
template<typename N , typename ... Ts>
using utl::meta::repeat = repeat_c< N::type::value, Ts... >
 
template<typename Fn , typename Seq >
using utl::meta::apply = apply_impl::apply_< Fn, Seq >
 
template<typename Fn , typename Seq >
using utl::meta::apply_t = eval< apply< Fn, Seq > >
 
template<typename List , index_t N>
using utl::meta::at_c = eval< at_impl::at_< List, N > >
 
template<typename List , typename N >
using utl::meta::at = at_c< List, N::type::value >
 
template<typename List >
using utl::meta::front = eval< front_impl::front_< List > >
 
template<typename List >
using utl::meta::back = eval< back_impl::back_< List > >
 
template<typename... Lists>
using utl::meta::cat = eval< cat_impl::cat_< Lists... > >
 
template<typename List , typename V , typename Fn >
using utl::meta::fold = eval< fold_impl::fold_< List, V, Fn > >
 
template<typename List , typename V , typename Fn >
using utl::meta::accumulate = fold< List, V, Fn >
 accumulate is an stl name for fold More...
 
template<typename List , typename V , typename Fn >
using utl::meta::rev_fold = eval< rev_fold_impl::rev_fold_< List, V, Fn > >
 
template<typename List >
using utl::meta::reverse = eval< reverse_impl::reverse_< List > >
 
template<typename List >
using utl::meta::pop_front = eval< pop_front_impl::pop_front_< List > >
 
template<typename List >
using utl::meta::pop_back = eval< pop_back_impl::pop_back_< List > >
 
template<typename... Args>
using utl::meta::transform = eval< transform_impl::transform_< typelist< Args... > > >
 
template<typename... Args>
using utl::meta::transform_lazy = eval< transform_lazy_impl::transform_lazy_< typelist< Args... > > >
 
template<typename List , typename Pred >
using utl::meta::find_if = eval< find_if_impl::find_if_< List, Pred, 0 > >
 
template<typename List , typename T >
using utl::meta::find = find_if< List, same_as< T > >
 
template<typename List , typename Pred >
using utl::meta::seek_if = eval< seek_if_impl::seek_if_< List, Pred, 0 > >
 
template<typename List , typename T >
using utl::meta::seek = seek_if< List, same_as< T > >
 
template<typename List , typename Pred >
using utl::meta::count_if = eval< count_if_impl::count_if_< List, Pred, 0 > >
 
template<typename List , typename T >
using utl::meta::count = count_if< List, same_as< T > >
 
template<typename List , typename Pred >
using utl::meta::filter = eval< filter_impl::filter_< List, Pred, typelist<> > >
 
template<typename List , typename Pred , typename T >
using utl::meta::replace_if = eval< replace_if_impl::replace_if_< List, Pred, T, typelist<> > >
 
template<typename List , typename T , typename U >
using utl::meta::replace = eval< replace_if< List, same_as< T >, U > >
 

Detailed Description

A template parameter "container".

Copyright (C) 2018-2019 Christos Choutouridis

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file typelist.h.