mirror of
https://github.com/bolero-MURAKAMI/Sprout
synced 2024-11-12 21:09:01 +00:00
add types::rebind, types::assign
This commit is contained in:
parent
58b0390679
commit
609f0b6f8a
8 changed files with 99 additions and 114 deletions
|
@ -9,7 +9,6 @@
|
||||||
#define SPROUT_TYPE_OPERATION_HPP
|
#define SPROUT_TYPE_OPERATION_HPP
|
||||||
|
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
#include <sprout/type/operation/tuple_cat.hpp>
|
|
||||||
#include <sprout/type/operation/size.hpp>
|
#include <sprout/type/operation/size.hpp>
|
||||||
#include <sprout/type/operation/empty.hpp>
|
#include <sprout/type/operation/empty.hpp>
|
||||||
#include <sprout/type/operation/at.hpp>
|
#include <sprout/type/operation/at.hpp>
|
||||||
|
@ -21,5 +20,8 @@
|
||||||
#include <sprout/type/operation/push_front.hpp>
|
#include <sprout/type/operation/push_front.hpp>
|
||||||
#include <sprout/type/operation/pop_back.hpp>
|
#include <sprout/type/operation/pop_back.hpp>
|
||||||
#include <sprout/type/operation/pop_front.hpp>
|
#include <sprout/type/operation/pop_front.hpp>
|
||||||
|
#include <sprout/type/operation/tuple_cat.hpp>
|
||||||
|
#include <sprout/type/operation/rebind.hpp>
|
||||||
|
#include <sprout/type/operation/assign.hpp>
|
||||||
|
|
||||||
#endif // #ifndef SPROUT_TYPE_OPERATION_HPP
|
#endif // #ifndef SPROUT_TYPE_OPERATION_HPP
|
||||||
|
|
|
@ -9,40 +9,21 @@
|
||||||
#define SPROUT_TYPE_OPERATION_APPEND_BACK_HPP
|
#define SPROUT_TYPE_OPERATION_APPEND_BACK_HPP
|
||||||
|
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
#include <sprout/index_tuple/metafunction.hpp>
|
#include <sprout/type/operation/tuple_cat.hpp>
|
||||||
#include <sprout/type/tuple.hpp>
|
|
||||||
#include <sprout/type/rebind_types.hpp>
|
|
||||||
#include <sprout/tuple/indexes.hpp>
|
|
||||||
|
|
||||||
namespace sprout {
|
namespace sprout {
|
||||||
namespace types {
|
namespace types {
|
||||||
//
|
//
|
||||||
// append_back
|
// append_back
|
||||||
//
|
//
|
||||||
template<typename Tuple, typename InputTuple>
|
template<typename Tuple, typename... InputTuples>
|
||||||
struct append_back {
|
struct append_back
|
||||||
private:
|
: public sprout::types::tuple_cat<Tuple, InputTuples...>
|
||||||
template<typename IndexTuple1, typename IndexTuple2>
|
|
||||||
struct apply_impl;
|
|
||||||
template<sprout::index_t... Indexes1, sprout::index_t... Indexes2>
|
|
||||||
struct apply_impl<sprout::index_tuple<Indexes1...>, sprout::index_tuple<Indexes2...> >
|
|
||||||
: public sprout::types::rebind_types<
|
|
||||||
Tuple
|
|
||||||
>::template apply<
|
|
||||||
typename sprout::types::tuple_element<Indexes1, Tuple>::type...,
|
|
||||||
typename sprout::types::tuple_element<Indexes2, InputTuple>::type...
|
|
||||||
>
|
|
||||||
{};
|
{};
|
||||||
public:
|
|
||||||
typedef typename apply_impl<
|
|
||||||
typename sprout::tuple_indexes<Tuple>::type,
|
|
||||||
typename sprout::tuple_indexes<InputTuple>::type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
#if SPROUT_USE_TEMPLATE_ALIASES
|
#if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
template<typename Tuple, typename InputTuple>
|
template<typename Tuple, typename... InputTuples>
|
||||||
using append_back_t = typename sprout::types::append_back<Tuple, InputTuple>::type;
|
using append_back_t = typename sprout::types::append_back<Tuple, InputTuples...>::type;
|
||||||
#endif // #if SPROUT_USE_TEMPLATE_ALIASES
|
#endif // #if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
} // namespace types
|
} // namespace types
|
||||||
} // namespace sprout
|
} // namespace sprout
|
||||||
|
|
|
@ -9,40 +9,25 @@
|
||||||
#define SPROUT_TYPE_OPERATION_APPEND_FRONT_HPP
|
#define SPROUT_TYPE_OPERATION_APPEND_FRONT_HPP
|
||||||
|
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
#include <sprout/index_tuple/metafunction.hpp>
|
|
||||||
#include <sprout/type/tuple.hpp>
|
|
||||||
#include <sprout/type/rebind_types.hpp>
|
#include <sprout/type/rebind_types.hpp>
|
||||||
#include <sprout/tuple/indexes.hpp>
|
#include <sprout/type/operation/tuple_cat.hpp>
|
||||||
|
|
||||||
namespace sprout {
|
namespace sprout {
|
||||||
namespace types {
|
namespace types {
|
||||||
//
|
//
|
||||||
// append_front
|
// append_front
|
||||||
//
|
//
|
||||||
template<typename Tuple, typename InputTuple>
|
template<typename Tuple, typename... InputTuples>
|
||||||
struct append_front {
|
struct append_front
|
||||||
private:
|
: public sprout::types::tuple_cat<
|
||||||
template<typename IndexTuple1, typename IndexTuple2>
|
typename sprout::types::rebind_types<Tuple>::template apply<>::type,
|
||||||
struct apply_impl;
|
InputTuples..., Tuple
|
||||||
template<sprout::index_t... Indexes1, sprout::index_t... Indexes2>
|
|
||||||
struct apply_impl<sprout::index_tuple<Indexes1...>, sprout::index_tuple<Indexes2...> >
|
|
||||||
: public sprout::types::rebind_types<
|
|
||||||
Tuple
|
|
||||||
>::template apply<
|
|
||||||
typename sprout::types::tuple_element<Indexes2, InputTuple>::type...,
|
|
||||||
typename sprout::types::tuple_element<Indexes1, Tuple>::type...
|
|
||||||
>
|
>
|
||||||
{};
|
{};
|
||||||
public:
|
|
||||||
typedef typename apply_impl<
|
|
||||||
typename sprout::tuple_indexes<Tuple>::type,
|
|
||||||
typename sprout::tuple_indexes<InputTuple>::type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
#if SPROUT_USE_TEMPLATE_ALIASES
|
#if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
template<typename Tuple, typename InputTuple>
|
template<typename Tuple, typename... InputTuples>
|
||||||
using append_front_t = typename sprout::types::append_front<Tuple, InputTuple>::type;
|
using append_front_t = typename sprout::types::append_front<Tuple, InputTuples...>::type;
|
||||||
#endif // #if SPROUT_USE_TEMPLATE_ALIASES
|
#endif // #if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
} // namespace types
|
} // namespace types
|
||||||
} // namespace sprout
|
} // namespace sprout
|
||||||
|
|
35
sprout/type/operation/assign.hpp
Normal file
35
sprout/type/operation/assign.hpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2014 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_OPERATION_ASSIGN_HPP
|
||||||
|
#define SPROUT_TYPE_OPERATION_ASSIGN_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/type/rebind_types.hpp>
|
||||||
|
#include <sprout/type/operation/tuple_cat.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
namespace types {
|
||||||
|
//
|
||||||
|
// assign
|
||||||
|
//
|
||||||
|
template<typename Tuple, typename InputTuple>
|
||||||
|
struct assign
|
||||||
|
: public sprout::types::tuple_cat<
|
||||||
|
typename sprout::types::rebind_types<Tuple>::template apply<>::type,
|
||||||
|
InputTuple
|
||||||
|
>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
|
template<typename Tuple, typename InputTuple>
|
||||||
|
using assign_t = typename sprout::types::assign<Tuple, InputTuple>::type;
|
||||||
|
#endif // #if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
|
} // namespace types
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_OPERATION_ASSIGN_HPP
|
|
@ -9,10 +9,8 @@
|
||||||
#define SPROUT_TYPE_OPERATION_PUSH_BACK_HPP
|
#define SPROUT_TYPE_OPERATION_PUSH_BACK_HPP
|
||||||
|
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
#include <sprout/index_tuple/metafunction.hpp>
|
#include <sprout/type/type_tuple.hpp>
|
||||||
#include <sprout/type/tuple.hpp>
|
#include <sprout/type/operation/tuple_cat.hpp>
|
||||||
#include <sprout/type/rebind_types.hpp>
|
|
||||||
#include <sprout/tuple/indexes.hpp>
|
|
||||||
|
|
||||||
namespace sprout {
|
namespace sprout {
|
||||||
namespace types {
|
namespace types {
|
||||||
|
@ -20,24 +18,9 @@ namespace sprout {
|
||||||
// push_back
|
// push_back
|
||||||
//
|
//
|
||||||
template<typename Tuple, typename... Ts>
|
template<typename Tuple, typename... Ts>
|
||||||
struct push_back {
|
struct push_back
|
||||||
private:
|
: public sprout::types::tuple_cat<Tuple, sprout::types::type_tuple<Ts...> >
|
||||||
template<typename IndexTuple>
|
|
||||||
struct apply_impl;
|
|
||||||
template<sprout::index_t... Indexes>
|
|
||||||
struct apply_impl<sprout::index_tuple<Indexes...> >
|
|
||||||
: public sprout::types::rebind_types<
|
|
||||||
Tuple
|
|
||||||
>::template apply<
|
|
||||||
typename sprout::types::tuple_element<Indexes, Tuple>::type...,
|
|
||||||
Ts...
|
|
||||||
>
|
|
||||||
{};
|
{};
|
||||||
public:
|
|
||||||
typedef typename apply_impl<
|
|
||||||
typename sprout::tuple_indexes<Tuple>::type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
#if SPROUT_USE_TEMPLATE_ALIASES
|
#if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
template<typename Tuple, typename... Ts>
|
template<typename Tuple, typename... Ts>
|
||||||
|
|
|
@ -9,10 +9,9 @@
|
||||||
#define SPROUT_TYPE_OPERATION_PUSH_FRONT_HPP
|
#define SPROUT_TYPE_OPERATION_PUSH_FRONT_HPP
|
||||||
|
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
#include <sprout/index_tuple/metafunction.hpp>
|
|
||||||
#include <sprout/type/tuple.hpp>
|
|
||||||
#include <sprout/type/rebind_types.hpp>
|
#include <sprout/type/rebind_types.hpp>
|
||||||
#include <sprout/tuple/indexes.hpp>
|
#include <sprout/type/type_tuple.hpp>
|
||||||
|
#include <sprout/type/operation/tuple_cat.hpp>
|
||||||
|
|
||||||
namespace sprout {
|
namespace sprout {
|
||||||
namespace types {
|
namespace types {
|
||||||
|
@ -20,24 +19,12 @@ namespace sprout {
|
||||||
// push_front
|
// push_front
|
||||||
//
|
//
|
||||||
template<typename Tuple, typename... Ts>
|
template<typename Tuple, typename... Ts>
|
||||||
struct push_front {
|
struct push_front
|
||||||
private:
|
: public sprout::types::tuple_cat<
|
||||||
template<typename IndexTuple>
|
typename sprout::types::rebind_types<Tuple>::template apply<>::type,
|
||||||
struct apply_impl;
|
sprout::types::type_tuple<Ts...>, Tuple
|
||||||
template<sprout::index_t... Indexes>
|
|
||||||
struct apply_impl<sprout::index_tuple<Indexes...> >
|
|
||||||
: public sprout::types::rebind_types<
|
|
||||||
Tuple
|
|
||||||
>::template apply<
|
|
||||||
Ts...,
|
|
||||||
typename sprout::types::tuple_element<Indexes, Tuple>::type...
|
|
||||||
>
|
>
|
||||||
{};
|
{};
|
||||||
public:
|
|
||||||
typedef typename apply_impl<
|
|
||||||
typename sprout::tuple_indexes<Tuple>::type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
#if SPROUT_USE_TEMPLATE_ALIASES
|
#if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
template<typename Tuple, typename... Ts>
|
template<typename Tuple, typename... Ts>
|
||||||
|
|
31
sprout/type/operation/rebind.hpp
Normal file
31
sprout/type/operation/rebind.hpp
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2014 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_OPERATION_REBIND_HPP
|
||||||
|
#define SPROUT_TYPE_OPERATION_REBIND_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/type/rebind_types.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
namespace types {
|
||||||
|
//
|
||||||
|
// rebind
|
||||||
|
//
|
||||||
|
template<typename Tuple, typename... Ts>
|
||||||
|
struct rebind
|
||||||
|
: public sprout::types::rebind_types<Tuple>::template apply<Ts...>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
|
template<typename Tuple, typename... Ts>
|
||||||
|
using rebind_t = typename sprout::types::rebind<Tuple, Ts...>::type;
|
||||||
|
#endif // #if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
|
} // namespace types
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_OPERATION_REBIND_HPP
|
|
@ -218,25 +218,6 @@ namespace sprout {
|
||||||
struct pop_front<sprout::types::type_tuple<Head, Tail...> >
|
struct pop_front<sprout::types::type_tuple<Head, Tail...> >
|
||||||
: public sprout::identity<sprout::types::type_tuple<Tail...> >
|
: public sprout::identity<sprout::types::type_tuple<Tail...> >
|
||||||
{};
|
{};
|
||||||
|
|
||||||
//
|
|
||||||
// append_back
|
|
||||||
//
|
|
||||||
template<typename Tuple, typename InputTuple>
|
|
||||||
struct append_back;
|
|
||||||
template<typename Tuple, typename... InputTypes>
|
|
||||||
struct append_back<Tuple, sprout::types::type_tuple<InputTypes...> >
|
|
||||||
: public sprout::types::push_back<Tuple, InputTypes...>
|
|
||||||
{};
|
|
||||||
//
|
|
||||||
// append_front
|
|
||||||
//
|
|
||||||
template<typename Tuple, typename InputTuple>
|
|
||||||
struct append_front;
|
|
||||||
template<typename Tuple, typename... InputTypes>
|
|
||||||
struct append_front<Tuple, sprout::types::type_tuple<InputTypes...> >
|
|
||||||
: public sprout::types::push_front<InputTypes..., Tuple>
|
|
||||||
{};
|
|
||||||
} // namespace types
|
} // namespace types
|
||||||
} // namespace sprout
|
} // namespace sprout
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue