OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-dev/] [fsf-gcc-snapshot-1-mar-12/] [or1k-gcc/] [libstdc++-v3/] [include/] [ext/] [typelist.h] - Diff between revs 742 and 783

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 742 Rev 783
// -*- C++ -*-
// -*- C++ -*-
 
 
// Copyright (C) 2005, 2006, 2008, 2009, 2010, 2011
// Copyright (C) 2005, 2006, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
// Free Software Foundation, Inc.
//
//
// This file is part of the GNU ISO C++ Library.  This library is free
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// any later version.
 
 
// This library is distributed in the hope that it will be useful,
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// GNU General Public License for more details.
 
 
// Under Section 7 of GPL version 3, you are granted additional
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// 3.1, as published by the Free Software Foundation.
 
 
// You should have received a copy of the GNU General Public License and
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// <http://www.gnu.org/licenses/>.
// <http://www.gnu.org/licenses/>.
 
 
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
 
 
// Permission to use, copy, modify, sell, and distribute this software
// Permission to use, copy, modify, sell, and distribute this software
// is hereby granted without fee, provided that the above copyright
// is hereby granted without fee, provided that the above copyright
// notice appears in all copies, and that both that copyright notice and
// notice appears in all copies, and that both that copyright notice and
// this permission notice appear in supporting documentation. None of
// this permission notice appear in supporting documentation. None of
// the above authors, nor IBM Haifa Research Laboratories, make any
// the above authors, nor IBM Haifa Research Laboratories, make any
// representation about the suitability of this software for any
// representation about the suitability of this software for any
// purpose. It is provided "as is" without express or implied warranty.
// purpose. It is provided "as is" without express or implied warranty.
 
 
/**
/**
 *  @file ext/typelist.h
 *  @file ext/typelist.h
 *  This file is a GNU extension to the Standard C++ Library.
 *  This file is a GNU extension to the Standard C++ Library.
 *
 *
 *  Contains typelist_chain definitions.
 *  Contains typelist_chain definitions.
 *  Typelists are an idea by Andrei Alexandrescu.
 *  Typelists are an idea by Andrei Alexandrescu.
 */
 */
 
 
#ifndef _TYPELIST_H
#ifndef _TYPELIST_H
#define _TYPELIST_H 1
#define _TYPELIST_H 1
 
 
#include <ext/type_traits.h>
#include <ext/type_traits.h>
 
 
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 
/** @namespace __gnu_cxx::typelist
/** @namespace __gnu_cxx::typelist
 *  @brief GNU typelist extensions for public compile-time use.
 *  @brief GNU typelist extensions for public compile-time use.
*/
*/
namespace typelist
namespace typelist
{
{
  struct null_type { };
  struct null_type { };
 
 
  template<typename Root>
  template<typename Root>
    struct node
    struct node
    {
    {
      typedef Root      root;
      typedef Root      root;
    };
    };
 
 
  // Forward declarations of functors.
  // Forward declarations of functors.
  template<typename Hd, typename Typelist>
  template<typename Hd, typename Typelist>
    struct chain
    struct chain
    {
    {
      typedef Hd        head;
      typedef Hd        head;
      typedef Typelist  tail;
      typedef Typelist  tail;
    };
    };
 
 
  // Apply all typelist types to unary functor.
  // Apply all typelist types to unary functor.
  template<typename Fn, typename Typelist>
  template<typename Fn, typename Typelist>
    void
    void
    apply(Fn&, Typelist);
    apply(Fn&, Typelist);
 
 
  /// Apply all typelist types to generator functor.
  /// Apply all typelist types to generator functor.
  template<typename Gn, typename Typelist>
  template<typename Gn, typename Typelist>
    void
    void
    apply_generator(Gn&, Typelist);
    apply_generator(Gn&, Typelist);
 
 
  // Apply all typelist types and values to generator functor.
  // Apply all typelist types and values to generator functor.
  template<typename Gn, typename TypelistT, typename TypelistV>
  template<typename Gn, typename TypelistT, typename TypelistV>
    void
    void
    apply_generator(Gn&, TypelistT, TypelistV);
    apply_generator(Gn&, TypelistT, TypelistV);
 
 
  template<typename Typelist0, typename Typelist1>
  template<typename Typelist0, typename Typelist1>
    struct append;
    struct append;
 
 
  template<typename Typelist_Typelist>
  template<typename Typelist_Typelist>
    struct append_typelist;
    struct append_typelist;
 
 
  template<typename Typelist, typename T>
  template<typename Typelist, typename T>
    struct contains;
    struct contains;
 
 
  template<typename Typelist, template<typename T> class Pred>
  template<typename Typelist, template<typename T> class Pred>
    struct filter;
    struct filter;
 
 
  template<typename Typelist, int i>
  template<typename Typelist, int i>
    struct at_index;
    struct at_index;
 
 
  template<typename Typelist, template<typename T> class Transform>
  template<typename Typelist, template<typename T> class Transform>
    struct transform;
    struct transform;
 
 
  template<typename Typelist_Typelist>
  template<typename Typelist_Typelist>
    struct flatten;
    struct flatten;
 
 
  template<typename Typelist>
  template<typename Typelist>
    struct from_first;
    struct from_first;
 
 
  template<typename T1>
  template<typename T1>
    struct create1;
    struct create1;
 
 
  template<typename T1, typename T2>
  template<typename T1, typename T2>
    struct create2;
    struct create2;
 
 
  template<typename T1, typename T2, typename T3>
  template<typename T1, typename T2, typename T3>
    struct create3;
    struct create3;
 
 
  template<typename T1, typename T2, typename T3, typename T4>
  template<typename T1, typename T2, typename T3, typename T4>
    struct create4;
    struct create4;
 
 
  template<typename T1, typename T2, typename T3, typename T4, typename T5>
  template<typename T1, typename T2, typename T3, typename T4, typename T5>
    struct create5;
    struct create5;
 
 
  template<typename T1, typename T2, typename T3,
  template<typename T1, typename T2, typename T3,
           typename T4, typename T5, typename T6>
           typename T4, typename T5, typename T6>
    struct create6;
    struct create6;
} // namespace typelist
} // namespace typelist
 
 
_GLIBCXX_END_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
} // namespace
 
 
 
 
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 
namespace typelist
namespace typelist
{
{
namespace detail
namespace detail
{
{
  template<typename Fn, typename Typelist_Chain>
  template<typename Fn, typename Typelist_Chain>
    struct apply_;
    struct apply_;
 
 
  template<typename Fn, typename Hd, typename Tl>
  template<typename Fn, typename Hd, typename Tl>
    struct apply_<Fn, chain<Hd, Tl> >
    struct apply_<Fn, chain<Hd, Tl> >
    {
    {
      void
      void
      operator()(Fn& f)
      operator()(Fn& f)
      {
      {
        f.operator()(Hd());
        f.operator()(Hd());
        apply_<Fn, Tl> next;
        apply_<Fn, Tl> next;
        next(f);
        next(f);
      }
      }
    };
    };
 
 
  template<typename Fn>
  template<typename Fn>
    struct apply_<Fn, null_type>
    struct apply_<Fn, null_type>
    {
    {
      void
      void
      operator()(Fn&) { }
      operator()(Fn&) { }
    };
    };
 
 
  template<typename Gn, typename Typelist_Chain>
  template<typename Gn, typename Typelist_Chain>
    struct apply_generator1_;
    struct apply_generator1_;
 
 
  template<typename Gn, typename Hd, typename Tl>
  template<typename Gn, typename Hd, typename Tl>
    struct apply_generator1_<Gn, chain<Hd, Tl> >
    struct apply_generator1_<Gn, chain<Hd, Tl> >
    {
    {
      void
      void
      operator()(Gn& g)
      operator()(Gn& g)
      {
      {
        g.template operator()<Hd>();
        g.template operator()<Hd>();
        apply_generator1_<Gn, Tl> next;
        apply_generator1_<Gn, Tl> next;
        next(g);
        next(g);
      }
      }
    };
    };
 
 
  template<typename Gn>
  template<typename Gn>
    struct apply_generator1_<Gn, null_type>
    struct apply_generator1_<Gn, null_type>
    {
    {
      void
      void
      operator()(Gn&) { }
      operator()(Gn&) { }
    };
    };
 
 
  template<typename Gn, typename TypelistT_Chain, typename TypelistV_Chain>
  template<typename Gn, typename TypelistT_Chain, typename TypelistV_Chain>
    struct apply_generator2_;
    struct apply_generator2_;
 
 
  template<typename Gn, typename Hd1, typename TlT, typename Hd2, typename TlV>
  template<typename Gn, typename Hd1, typename TlT, typename Hd2, typename TlV>
    struct apply_generator2_<Gn, chain<Hd1, TlT>, chain<Hd2, TlV> >
    struct apply_generator2_<Gn, chain<Hd1, TlT>, chain<Hd2, TlV> >
    {
    {
      void
      void
      operator()(Gn& g)
      operator()(Gn& g)
      {
      {
        g.template operator()<Hd1, Hd2>();
        g.template operator()<Hd1, Hd2>();
        apply_generator2_<Gn, TlT, TlV> next;
        apply_generator2_<Gn, TlT, TlV> next;
        next(g);
        next(g);
      }
      }
    };
    };
 
 
  template<typename Gn>
  template<typename Gn>
    struct apply_generator2_<Gn, null_type, null_type>
    struct apply_generator2_<Gn, null_type, null_type>
    {
    {
      void
      void
      operator()(Gn&) { }
      operator()(Gn&) { }
    };
    };
 
 
  template<typename Typelist_Chain0, typename Typelist_Chain1>
  template<typename Typelist_Chain0, typename Typelist_Chain1>
    struct append_;
    struct append_;
 
 
  template<typename Hd, typename Tl, typename Typelist_Chain>
  template<typename Hd, typename Tl, typename Typelist_Chain>
    struct append_<chain<Hd, Tl>, Typelist_Chain>
    struct append_<chain<Hd, Tl>, Typelist_Chain>
    {
    {
    private:
    private:
      typedef append_<Tl, Typelist_Chain>                       append_type;
      typedef append_<Tl, Typelist_Chain>                       append_type;
 
 
    public:
    public:
      typedef chain<Hd, typename append_type::type>             type;
      typedef chain<Hd, typename append_type::type>             type;
    };
    };
 
 
  template<typename Typelist_Chain>
  template<typename Typelist_Chain>
    struct append_<null_type, Typelist_Chain>
    struct append_<null_type, Typelist_Chain>
    {
    {
      typedef Typelist_Chain                                    type;
      typedef Typelist_Chain                                    type;
    };
    };
 
 
  template<typename Typelist_Chain>
  template<typename Typelist_Chain>
    struct append_<Typelist_Chain, null_type>
    struct append_<Typelist_Chain, null_type>
    {
    {
      typedef Typelist_Chain                                    type;
      typedef Typelist_Chain                                    type;
    };
    };
 
 
  template<>
  template<>
    struct append_<null_type, null_type>
    struct append_<null_type, null_type>
    {
    {
      typedef null_type                                         type;
      typedef null_type                                         type;
    };
    };
 
 
  template<typename Typelist_Typelist_Chain>
  template<typename Typelist_Typelist_Chain>
    struct append_typelist_;
    struct append_typelist_;
 
 
  template<typename Hd>
  template<typename Hd>
    struct append_typelist_<chain<Hd, null_type> >
    struct append_typelist_<chain<Hd, null_type> >
    {
    {
      typedef chain<Hd, null_type>                              type;
      typedef chain<Hd, null_type>                              type;
    };
    };
 
 
  template<typename Hd, typename Tl>
  template<typename Hd, typename Tl>
    struct append_typelist_<chain< Hd, Tl> >
    struct append_typelist_<chain< Hd, Tl> >
    {
    {
    private:
    private:
      typedef typename append_typelist_<Tl>::type               rest_type;
      typedef typename append_typelist_<Tl>::type               rest_type;
 
 
    public:
    public:
      typedef typename append<Hd, node<rest_type> >::type::root type;
      typedef typename append<Hd, node<rest_type> >::type::root type;
    };
    };
 
 
  template<typename Typelist_Chain, typename T>
  template<typename Typelist_Chain, typename T>
    struct contains_;
    struct contains_;
 
 
  template<typename T>
  template<typename T>
    struct contains_<null_type, T>
    struct contains_<null_type, T>
    {
    {
      enum
      enum
        {
        {
          value = false
          value = false
        };
        };
    };
    };
 
 
  template<typename Hd, typename Tl, typename T>
  template<typename Hd, typename Tl, typename T>
    struct contains_<chain<Hd, Tl>, T>
    struct contains_<chain<Hd, Tl>, T>
    {
    {
      enum
      enum
        {
        {
          value = contains_<Tl, T>::value
          value = contains_<Tl, T>::value
        };
        };
    };
    };
 
 
  template<typename Tl, typename T>
  template<typename Tl, typename T>
    struct contains_<chain<T, Tl>, T>
    struct contains_<chain<T, Tl>, T>
    {
    {
      enum
      enum
        {
        {
          value = true
          value = true
        };
        };
    };
    };
 
 
  template<typename Typelist_Chain, template<typename T> class Pred>
  template<typename Typelist_Chain, template<typename T> class Pred>
    struct chain_filter_;
    struct chain_filter_;
 
 
  template<template<typename T> class Pred>
  template<template<typename T> class Pred>
    struct chain_filter_<null_type, Pred>
    struct chain_filter_<null_type, Pred>
    {
    {
      typedef null_type                                         type;
      typedef null_type                                         type;
  };
  };
 
 
  template<typename Hd, typename Tl, template<typename T> class Pred>
  template<typename Hd, typename Tl, template<typename T> class Pred>
    struct chain_filter_<chain<Hd, Tl>, Pred>
    struct chain_filter_<chain<Hd, Tl>, Pred>
    {
    {
    private:
    private:
      enum
      enum
        {
        {
          include_hd = Pred<Hd>::value
          include_hd = Pred<Hd>::value
        };
        };
 
 
      typedef typename chain_filter_<Tl, Pred>::type            rest_type;
      typedef typename chain_filter_<Tl, Pred>::type            rest_type;
      typedef chain<Hd, rest_type>                              chain_type;
      typedef chain<Hd, rest_type>                              chain_type;
 
 
    public:
    public:
      typedef typename __conditional_type<include_hd, chain_type, rest_type>::__type type;
      typedef typename __conditional_type<include_hd, chain_type, rest_type>::__type type;
  };
  };
 
 
  template<typename Typelist_Chain, int i>
  template<typename Typelist_Chain, int i>
    struct chain_at_index_;
    struct chain_at_index_;
 
 
  template<typename Hd, typename Tl>
  template<typename Hd, typename Tl>
    struct chain_at_index_<chain<Hd, Tl>, 0>
    struct chain_at_index_<chain<Hd, Tl>, 0>
    {
    {
      typedef Hd                                                type;
      typedef Hd                                                type;
    };
    };
 
 
  template<typename Hd, typename Tl, int i>
  template<typename Hd, typename Tl, int i>
    struct chain_at_index_<chain<Hd, Tl>, i>
    struct chain_at_index_<chain<Hd, Tl>, i>
    {
    {
      typedef typename chain_at_index_<Tl, i - 1>::type         type;
      typedef typename chain_at_index_<Tl, i - 1>::type         type;
    };
    };
 
 
  template<class Typelist_Chain, template<typename T> class Transform>
  template<class Typelist_Chain, template<typename T> class Transform>
    struct chain_transform_;
    struct chain_transform_;
 
 
  template<template<typename T> class Transform>
  template<template<typename T> class Transform>
    struct chain_transform_<null_type, Transform>
    struct chain_transform_<null_type, Transform>
    {
    {
      typedef null_type                                         type;
      typedef null_type                                         type;
    };
    };
 
 
  template<class Hd, class Tl, template<typename T> class Transform>
  template<class Hd, class Tl, template<typename T> class Transform>
    struct chain_transform_<chain<Hd, Tl>, Transform>
    struct chain_transform_<chain<Hd, Tl>, Transform>
    {
    {
    private:
    private:
      typedef typename chain_transform_<Tl, Transform>::type    rest_type;
      typedef typename chain_transform_<Tl, Transform>::type    rest_type;
      typedef typename Transform<Hd>::type                      transform_type;
      typedef typename Transform<Hd>::type                      transform_type;
 
 
    public:
    public:
      typedef chain<transform_type, rest_type>                  type;
      typedef chain<transform_type, rest_type>                  type;
    };
    };
 
 
  template<typename Typelist_Typelist_Chain>
  template<typename Typelist_Typelist_Chain>
    struct chain_flatten_;
    struct chain_flatten_;
 
 
  template<typename Hd_Tl>
  template<typename Hd_Tl>
    struct chain_flatten_<chain<Hd_Tl, null_type> >
    struct chain_flatten_<chain<Hd_Tl, null_type> >
    {
    {
      typedef typename Hd_Tl::root                              type;
      typedef typename Hd_Tl::root                              type;
    };
    };
 
 
  template<typename Hd_Typelist, class Tl_Typelist>
  template<typename Hd_Typelist, class Tl_Typelist>
    struct chain_flatten_<chain<Hd_Typelist, Tl_Typelist> >
    struct chain_flatten_<chain<Hd_Typelist, Tl_Typelist> >
    {
    {
    private:
    private:
      typedef typename chain_flatten_<Tl_Typelist>::type        rest_type;
      typedef typename chain_flatten_<Tl_Typelist>::type        rest_type;
      typedef append<Hd_Typelist, node<rest_type> >             append_type;
      typedef append<Hd_Typelist, node<rest_type> >             append_type;
    public:
    public:
      typedef typename append_type::type::root                  type;
      typedef typename append_type::type::root                  type;
    };
    };
} // namespace detail
} // namespace detail
} // namespace typelist
} // namespace typelist
 
 
_GLIBCXX_END_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
} // namespace
 
 
#define _GLIBCXX_TYPELIST_CHAIN1(X0) __gnu_cxx::typelist::chain<X0, __gnu_cxx::typelist::null_type>
#define _GLIBCXX_TYPELIST_CHAIN1(X0) __gnu_cxx::typelist::chain<X0, __gnu_cxx::typelist::null_type>
#define _GLIBCXX_TYPELIST_CHAIN2(X0, X1) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN1(X1) >
#define _GLIBCXX_TYPELIST_CHAIN2(X0, X1) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN1(X1) >
#define _GLIBCXX_TYPELIST_CHAIN3(X0, X1, X2) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN2(X1, X2) >
#define _GLIBCXX_TYPELIST_CHAIN3(X0, X1, X2) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN2(X1, X2) >
#define _GLIBCXX_TYPELIST_CHAIN4(X0, X1, X2, X3) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN3(X1, X2, X3) >
#define _GLIBCXX_TYPELIST_CHAIN4(X0, X1, X2, X3) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN3(X1, X2, X3) >
#define _GLIBCXX_TYPELIST_CHAIN5(X0, X1, X2, X3, X4) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN4(X1, X2, X3, X4) >
#define _GLIBCXX_TYPELIST_CHAIN5(X0, X1, X2, X3, X4) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN4(X1, X2, X3, X4) >
#define _GLIBCXX_TYPELIST_CHAIN6(X0, X1, X2, X3, X4, X5) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN5(X1, X2, X3, X4, X5) >
#define _GLIBCXX_TYPELIST_CHAIN6(X0, X1, X2, X3, X4, X5) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN5(X1, X2, X3, X4, X5) >
#define _GLIBCXX_TYPELIST_CHAIN7(X0, X1, X2, X3, X4, X5, X6) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN6(X1, X2, X3, X4, X5, X6) >
#define _GLIBCXX_TYPELIST_CHAIN7(X0, X1, X2, X3, X4, X5, X6) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN6(X1, X2, X3, X4, X5, X6) >
#define _GLIBCXX_TYPELIST_CHAIN8(X0, X1, X2, X3, X4, X5, X6, X7) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN7(X1, X2, X3, X4, X5, X6, X7) >
#define _GLIBCXX_TYPELIST_CHAIN8(X0, X1, X2, X3, X4, X5, X6, X7) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN7(X1, X2, X3, X4, X5, X6, X7) >
#define _GLIBCXX_TYPELIST_CHAIN9(X0, X1, X2, X3, X4, X5, X6, X7, X8) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN8(X1, X2, X3, X4, X5, X6, X7, X8) >
#define _GLIBCXX_TYPELIST_CHAIN9(X0, X1, X2, X3, X4, X5, X6, X7, X8) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN8(X1, X2, X3, X4, X5, X6, X7, X8) >
#define _GLIBCXX_TYPELIST_CHAIN10(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN9(X1, X2, X3, X4, X5, X6, X7, X8, X9) >
#define _GLIBCXX_TYPELIST_CHAIN10(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN9(X1, X2, X3, X4, X5, X6, X7, X8, X9) >
#define _GLIBCXX_TYPELIST_CHAIN11(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN10(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) >
#define _GLIBCXX_TYPELIST_CHAIN11(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN10(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) >
#define _GLIBCXX_TYPELIST_CHAIN12(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN11(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) >
#define _GLIBCXX_TYPELIST_CHAIN12(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN11(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) >
#define _GLIBCXX_TYPELIST_CHAIN13(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN12(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) >
#define _GLIBCXX_TYPELIST_CHAIN13(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN12(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) >
#define _GLIBCXX_TYPELIST_CHAIN14(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN13(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) >
#define _GLIBCXX_TYPELIST_CHAIN14(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN13(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) >
#define _GLIBCXX_TYPELIST_CHAIN15(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN14(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) >
#define _GLIBCXX_TYPELIST_CHAIN15(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN14(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) >
#define _GLIBCXX_TYPELIST_CHAIN16(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN15(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) >
#define _GLIBCXX_TYPELIST_CHAIN16(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN15(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) >
#define _GLIBCXX_TYPELIST_CHAIN17(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN16(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) >
#define _GLIBCXX_TYPELIST_CHAIN17(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN16(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) >
#define _GLIBCXX_TYPELIST_CHAIN18(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN17(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) >
#define _GLIBCXX_TYPELIST_CHAIN18(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN17(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) >
#define _GLIBCXX_TYPELIST_CHAIN19(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN18(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) >
#define _GLIBCXX_TYPELIST_CHAIN19(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN18(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) >
#define _GLIBCXX_TYPELIST_CHAIN20(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN19(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) >
#define _GLIBCXX_TYPELIST_CHAIN20(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN19(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) >
 
 
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 
namespace typelist
namespace typelist
{
{
  template<typename Fn, typename Typelist>
  template<typename Fn, typename Typelist>
    void
    void
    apply(Fn& fn, Typelist)
    apply(Fn& fn, Typelist)
    {
    {
      detail::apply_<Fn, typename Typelist::root> a;
      detail::apply_<Fn, typename Typelist::root> a;
      a(fn);
      a(fn);
    }
    }
 
 
  template<typename Fn, typename Typelist>
  template<typename Fn, typename Typelist>
    void
    void
    apply_generator(Fn& fn, Typelist)
    apply_generator(Fn& fn, Typelist)
    {
    {
      detail::apply_generator1_<Fn, typename Typelist::root> a;
      detail::apply_generator1_<Fn, typename Typelist::root> a;
      a(fn);
      a(fn);
    }
    }
 
 
  template<typename Fn, typename TypelistT, typename TypelistV>
  template<typename Fn, typename TypelistT, typename TypelistV>
    void
    void
    apply_generator(Fn& fn, TypelistT, TypelistV)
    apply_generator(Fn& fn, TypelistT, TypelistV)
    {
    {
      typedef typename TypelistT::root rootT;
      typedef typename TypelistT::root rootT;
      typedef typename TypelistV::root rootV;
      typedef typename TypelistV::root rootV;
      detail::apply_generator2_<Fn, rootT, rootV> a;
      detail::apply_generator2_<Fn, rootT, rootV> a;
      a(fn);
      a(fn);
    }
    }
 
 
  template<typename Typelist0, typename Typelist1>
  template<typename Typelist0, typename Typelist1>
    struct append
    struct append
    {
    {
    private:
    private:
      typedef typename Typelist0::root                          root0_type;
      typedef typename Typelist0::root                          root0_type;
      typedef typename Typelist1::root                          root1_type;
      typedef typename Typelist1::root                          root1_type;
      typedef detail::append_<root0_type, root1_type>           append_type;
      typedef detail::append_<root0_type, root1_type>           append_type;
 
 
    public:
    public:
      typedef node<typename append_type::type>                  type;
      typedef node<typename append_type::type>                  type;
    };
    };
 
 
  template<typename Typelist_Typelist>
  template<typename Typelist_Typelist>
    struct append_typelist
    struct append_typelist
    {
    {
    private:
    private:
      typedef typename Typelist_Typelist::root                  root_type;
      typedef typename Typelist_Typelist::root                  root_type;
      typedef detail::append_typelist_<root_type>               append_type;
      typedef detail::append_typelist_<root_type>               append_type;
 
 
    public:
    public:
      typedef node<typename append_type::type>                  type;
      typedef node<typename append_type::type>                  type;
    };
    };
 
 
  template<typename Typelist, typename T>
  template<typename Typelist, typename T>
    struct contains
    struct contains
    {
    {
    private:
    private:
      typedef typename Typelist::root                           root_type;
      typedef typename Typelist::root                           root_type;
 
 
    public:
    public:
      enum
      enum
        {
        {
          value = detail::contains_<root_type, T>::value
          value = detail::contains_<root_type, T>::value
        };
        };
    };
    };
 
 
  template<typename Typelist, template<typename T> class Pred>
  template<typename Typelist, template<typename T> class Pred>
    struct filter
    struct filter
    {
    {
    private:
    private:
      typedef typename Typelist::root                           root_type;
      typedef typename Typelist::root                           root_type;
      typedef detail::chain_filter_<root_type, Pred>            filter_type;
      typedef detail::chain_filter_<root_type, Pred>            filter_type;
 
 
    public:
    public:
      typedef node<typename filter_type::type>                  type;
      typedef node<typename filter_type::type>                  type;
    };
    };
 
 
  template<typename Typelist, int i>
  template<typename Typelist, int i>
    struct at_index
    struct at_index
    {
    {
    private:
    private:
      typedef typename Typelist::root                           root_type;
      typedef typename Typelist::root                           root_type;
      typedef detail::chain_at_index_<root_type, i>             index_type;
      typedef detail::chain_at_index_<root_type, i>             index_type;
 
 
    public:
    public:
      typedef typename index_type::type                         type;
      typedef typename index_type::type                         type;
    };
    };
 
 
  template<typename Typelist, template<typename T> class Transform>
  template<typename Typelist, template<typename T> class Transform>
    struct transform
    struct transform
    {
    {
    private:
    private:
      typedef typename Typelist::root                           root_type;
      typedef typename Typelist::root                           root_type;
      typedef detail::chain_transform_<root_type, Transform>    transform_type;
      typedef detail::chain_transform_<root_type, Transform>    transform_type;
 
 
    public:
    public:
      typedef node<typename transform_type::type>               type;
      typedef node<typename transform_type::type>               type;
    };
    };
 
 
  template<typename Typelist_Typelist>
  template<typename Typelist_Typelist>
    struct flatten
    struct flatten
    {
    {
    private:
    private:
      typedef typename Typelist_Typelist::root                  root_type;
      typedef typename Typelist_Typelist::root                  root_type;
      typedef typename detail::chain_flatten_<root_type>::type  flatten_type;
      typedef typename detail::chain_flatten_<root_type>::type  flatten_type;
 
 
    public:
    public:
      typedef node<flatten_type>                                type;
      typedef node<flatten_type>                                type;
    };
    };
 
 
  template<typename Typelist>
  template<typename Typelist>
    struct from_first
    struct from_first
    {
    {
    private:
    private:
      typedef typename at_index<Typelist, 0>::type               first_type;
      typedef typename at_index<Typelist, 0>::type               first_type;
 
 
    public:
    public:
      typedef node<chain<first_type, null_type> >               type;
      typedef node<chain<first_type, null_type> >               type;
    };
    };
 
 
  template<typename T1>
  template<typename T1>
    struct create1
    struct create1
    {
    {
      typedef node<_GLIBCXX_TYPELIST_CHAIN1(T1)>                type;
      typedef node<_GLIBCXX_TYPELIST_CHAIN1(T1)>                type;
    };
    };
 
 
  template<typename T1, typename T2>
  template<typename T1, typename T2>
    struct create2
    struct create2
    {
    {
      typedef node<_GLIBCXX_TYPELIST_CHAIN2(T1,T2)>             type;
      typedef node<_GLIBCXX_TYPELIST_CHAIN2(T1,T2)>             type;
    };
    };
 
 
  template<typename T1, typename T2, typename T3>
  template<typename T1, typename T2, typename T3>
    struct create3
    struct create3
    {
    {
      typedef node<_GLIBCXX_TYPELIST_CHAIN3(T1,T2,T3)>          type;
      typedef node<_GLIBCXX_TYPELIST_CHAIN3(T1,T2,T3)>          type;
    };
    };
 
 
  template<typename T1, typename T2, typename T3, typename T4>
  template<typename T1, typename T2, typename T3, typename T4>
    struct create4
    struct create4
    {
    {
      typedef node<_GLIBCXX_TYPELIST_CHAIN4(T1,T2,T3,T4)>       type;
      typedef node<_GLIBCXX_TYPELIST_CHAIN4(T1,T2,T3,T4)>       type;
    };
    };
 
 
  template<typename T1, typename T2, typename T3,
  template<typename T1, typename T2, typename T3,
           typename T4, typename T5>
           typename T4, typename T5>
    struct create5
    struct create5
    {
    {
      typedef node<_GLIBCXX_TYPELIST_CHAIN5(T1,T2,T3,T4,T5)>    type;
      typedef node<_GLIBCXX_TYPELIST_CHAIN5(T1,T2,T3,T4,T5)>    type;
    };
    };
 
 
  template<typename T1, typename T2, typename T3,
  template<typename T1, typename T2, typename T3,
           typename T4, typename T5, typename T6>
           typename T4, typename T5, typename T6>
    struct create6
    struct create6
    {
    {
      typedef node<_GLIBCXX_TYPELIST_CHAIN6(T1,T2,T3,T4,T5,T6)> type;
      typedef node<_GLIBCXX_TYPELIST_CHAIN6(T1,T2,T3,T4,T5,T6)> type;
    };
    };
} // namespace typelist
} // namespace typelist
_GLIBCXX_END_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
} // namespace
 
 
 
 
#endif
#endif
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.