143c27b065
2006-12-05 Benjamin Kosnik <bkoz@redhat.com> * include/bits/localefwd.h: Consistent @file placement, use include/ as part of the path for files that have shadows instead of no name. * include/bits/valarray_after.h: Same. * include/bits/gslice_array.h: Same. * include/bits/gslice.h: Same. * include/bits/locale_classes.h: Same. * include/bits/locale_facets.h: Same. * include/bits/indirect_array.h: Same. * include/bits/basic_string.h: Same. * include/bits/ios_base.h: Same. * include/bits/postypes.h: Same. * include/bits/codecvt.h: Same. * include/bits/mask_array.h: Same. * include/bits/slice_array.h: Same. * include/bits/boost_concept_check.h: Same. * include/bits/char_traits.h: Same. * include/bits/stringfwd.h: Same. * include/bits/c++config: Same. * include/bits/valarray_array.h: Same. * include/bits/valarray_before.h: Same. * include/bits/cpp_type_traits.h: Same. * include/c/std_cerrno.h: Same. * include/precompiled/extc++.h: Same. * include/precompiled/stdtr1c++.h: Same. * include/precompiled/stdc++.h: Same. * include/tr1/cinttypes: Same. * include/tr1/fenv.h: Same. * include/tr1/mu_iterate.h: Same. * include/tr1/cstdio: Same. * include/tr1/limits.h: Same. * include/tr1/ctgmath: Same. * include/tr1/cstdarg: Same. * include/tr1/tuple: Same. * include/tr1/float.h: Same. * include/tr1/stdint.h: Same. * include/tr1/tuple_iterate.h: Same. * include/tr1/type_traits_fwd.h: Same. * include/tr1/hashtable_policy.h: Same. * include/tr1/cfenv: Same. * include/tr1/wctype.h: Same. * include/tr1/ref_fwd.h: Same. * include/tr1/bind_repeat.h: Same. * include/tr1/utility: Same. * include/tr1/climits: Same. * include/tr1/type_traits: Same. * include/tr1/stdlib.h: Same. * include/tr1/cwchar: Same. * include/tr1/stdio.h: Same. * include/tr1/ref_wrap_iterate.h: Same. * include/tr1/cstdint: Same. * include/tr1/memory: Same. * include/tr1/cstdbool: Same. * include/tr1/cwctype: Same. * include/tr1/bind_iterate.h: Same. * include/tr1/math.h: Same. * include/tr1/random: Same. * include/tr1/tuple_defs.h: Same. * include/tr1/cstdlib: Same. * include/tr1/unordered_map: Same. * include/tr1/boost_shared_ptr.h: Same. * include/tr1/cctype: Same. * include/tr1/random.tcc: Same. * include/tr1/wchar.h: Same. * include/tr1/hashtable: Same. * include/tr1/cmath: Same. * include/tr1/stdbool.h: Same. * include/tr1/ctime: Same. * include/tr1/functional: Same. * include/tr1/unordered_set: Same. * include/tr1/inttypes.h: Same. * include/tr1/functional_iterate.h: Same. * include/tr1/repeat.h: Same. * include/tr1/complex: Same. * include/tr1/cfloat: Same. * include/tr1/ctype.h: Same. * include/tr1/stdarg.h: Same. * include/tr1/tgmath.h: Same. * include/tr1/array: Same. * include/tr1/common.h: Same. * include/std/std_valarray.h: Same. * include/std/std_iostream.h: Same. * include/std/std_queue.h: Same. * include/std/std_algorithm.h: Same. * include/std/std_streambuf.h: Same. * include/std/std_iterator.h: Same. * include/std/std_ios.h: Same. * include/std/std_bitset.h: Same. * include/std/std_iosfwd.h: Same. * include/std/std_set.h: Same. * include/std/std_iomanip.h: Same. * include/std/std_fstream.h: Same. * include/std/std_functional.h: Same. * include/std/std_numeric.h: Same. * include/std/std_vector.h: Same. * include/std/std_deque.h: Same. * include/std/std_stdexcept.h: Same. * include/std/std_utility.h: Same. * include/std/std_stack.h: Same. * include/std/std_string.h: Same. * include/std/std_complex.h: Same. * include/std/std_memory.h: Same. * include/std/std_ostream.h: Same. * include/std/std_list.h: Same. * include/std/std_map.h: Same. * include/std/std_sstream.h: Same. * include/c_std/std_csignal.h: Same. * include/c_std/std_cstdlib.h: Same. * include/c_std/std_cstdio.h: Same. * include/c_std/std_cstdarg.h: Same. * include/c_std/std_cctype.h: Same. * include/c_std/std_cerrno.h: Same. * include/c_std/std_cmath.h: Same. * include/c_std/std_ctime.h: Same. * include/c_std/std_clocale.h: Same. * include/c_std/std_climits.h: Same. * include/c_std/std_cassert.h: Same. * include/c_std/cmath.tcc * include/c_std/std_csetjmp.h: Same. * include/c_std/std_cwchar.h: Same. * include/c_std/std_cfloat.h: Same. * include/c_std/std_cstring.h: Same. * include/c_std/std_cstddef.h: Same. * include/c_std/std_cwctype.h: Same. * config/locale/gnu/c_locale.h: Namespace scope in all files. * config/locale/gnu/messages_members.h: Same. * config/locale/gnu/c++locale_internal.h: Same. * config/locale/gnu/time_members.h: Same. * config/locale/ieee_1003.1-2001/c_locale.h: Same. * config/locale/ieee_1003.1-2001/messages_members.h: Same. * config/locale/generic/c_locale.h: Same. * config/locale/generic/messages_members.h: Same. * config/locale/generic/time_members.h: Same. * config/allocator/mt_allocator_base.h: Same. * config/allocator/malloc_allocator_base.h: Same. * config/allocator/new_allocator_base.h: Same. * config/allocator/pool_allocator_base.h: Same. * config/allocator/bitmap_allocator_base.h: Same. * config/os/windiss/ctype_noninline.h: Same. * config/os/windiss/os_defines.h: Same. * config/os/windiss/ctype_inline.h: Same. * config/os/newlib/ctype_noninline.h: Same. * config/os/newlib/os_defines.h: Same. * config/os/newlib/ctype_inline.h: Same. * config/os/aix/ctype_noninline.h: Same. * config/os/aix/os_defines.h: Same. * config/os/aix/ctype_inline.h: Same. * config/os/vxworks/ctype_noninline.h: Same. * config/os/vxworks/os_defines.h: Same. * config/os/vxworks/ctype_inline.h: Same. * config/os/hpux/ctype_noninline.h: Same. * config/os/hpux/os_defines.h: Same. * config/os/hpux/ctype_inline.h: Same. * config/os/mingw32/ctype_noninline.h: Same. * config/os/mingw32/os_defines.h: Same. * config/os/mingw32/ctype_inline.h: Same. * config/os/gnu-linux/ctype_noninline.h: Same. * config/os/gnu-linux/os_defines.h: Same. * config/os/gnu-linux/ctype_inline.h: Same. * config/os/tpf/ctype_noninline.h: Same. * config/os/tpf/os_defines.h: Same. * config/os/tpf/ctype_inline.h: Same. * config/os/uclibc/ctype_noninline.h: Same. * config/os/uclibc/os_defines.h: Same. * config/os/uclibc/ctype_inline.h: Same. * config/os/djgpp/ctype_noninline.h: Same. * config/os/djgpp/os_defines.h: Same. * config/os/djgpp/ctype_inline.h: Same. * config/os/qnx/qnx6.1/ctype_noninline.h: Same. * config/os/qnx/qnx6.1/ctype_inline.h: Same. * config/os/bsd/netbsd/ctype_noninline.h: Same. * config/os/bsd/netbsd/ctype_inline.h: Same. * config/os/bsd/darwin/ctype_noninline.h: Same. * config/os/bsd/darwin/ctype_inline.h: Same. * config/os/bsd/freebsd/ctype_noninline.h: Same. * config/os/bsd/freebsd/ctype_inline.h: Same. * config/os/irix/irix5.2/ctype_noninline.h: Same. * config/os/irix/irix5.2/ctype_inline.h: Same. * config/os/irix/irix6.5/ctype_noninline.h: Same. * config/os/irix/irix6.5/ctype_inline.h: Same. * config/os/solaris/solaris2.5/ctype_noninline.h: Same. * config/os/solaris/solaris2.5/ctype_inline.h: Same. * config/os/solaris/solaris2.6/ctype_noninline.h: Same. * config/os/solaris/solaris2.6/ctype_inline.h: Same. * config/os/solaris/solaris2.7/ctype_noninline.h: Same. * config/os/solaris/solaris2.7/ctype_inline.h: Same. * config/os/generic/ctype_noninline.h: Same. * config/os/generic/os_defines.h: Same. * config/os/generic/ctype_inline.h: Same. * config/cpu/arm/cxxabi_tweaks.h: Same. * config/cpu/powerpc/cpu_defines.h: Same. * config/cpu/generic/cxxabi_tweaks.h: Same. * config/cpu/generic/cpu_defines.h: Same. * config/cpu/generic/atomic_word.h: Same. * config/io/c_io_stdio.h: Same. * config/abi/compatibility.h: Same. * docs/doxygen/user.cfg.in: Adjust file list. From-SVN: r119561
162 lines
4.6 KiB
C++
162 lines
4.6 KiB
C++
// class template tuple -*- C++ -*-
|
|
|
|
// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
|
//
|
|
// 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
|
|
// terms of the GNU General Public License as published by the
|
|
// Free Software Foundation; either version 2, or (at your option)
|
|
// any later version.
|
|
|
|
// This library 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 General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License along
|
|
// with this library; see the file COPYING. If not, write to the Free
|
|
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
|
// USA.
|
|
|
|
// As a special exception, you may use this file as part of a free software
|
|
// library without restriction. Specifically, if other files instantiate
|
|
// templates or use macros or inline functions from this file, or you compile
|
|
// this file and link it with other files to produce an executable, this
|
|
// file does not by itself cause the resulting executable to be covered by
|
|
// the GNU General Public License. This exception does not however
|
|
// invalidate any other reasons why the executable file might be covered by
|
|
// the GNU General Public License.
|
|
|
|
/** @file tr1/tuple
|
|
* This is a TR1 C++ Library header.
|
|
*/
|
|
|
|
// Chris Jefferson <chris@bubblescope.net>
|
|
|
|
#ifndef _TR1_TUPLE
|
|
#define _TR1_TUPLE 1
|
|
|
|
#include <tr1/utility>
|
|
#include <tr1/ref_fwd.h>
|
|
|
|
namespace std
|
|
{
|
|
_GLIBCXX_BEGIN_NAMESPACE(tr1)
|
|
|
|
// An implementation specific class which is used in the tuple class
|
|
// when the tuple is not maximum possible size.
|
|
struct _NullClass { };
|
|
|
|
/// Gives the type of the ith element of a given tuple type.
|
|
template<int __i, typename _Tp>
|
|
struct tuple_element;
|
|
|
|
/// Finds the size of a given tuple type.
|
|
template<typename _Tp>
|
|
struct tuple_size;
|
|
|
|
// Adds a const reference to a non-reference type.
|
|
template<typename _Tp>
|
|
struct __add_c_ref
|
|
{ typedef const _Tp& type; };
|
|
|
|
template<typename _Tp>
|
|
struct __add_c_ref<_Tp&>
|
|
{ typedef _Tp& type; };
|
|
|
|
// Adds a reference to a non-reference type.
|
|
template<typename _Tp>
|
|
struct __add_ref
|
|
{ typedef _Tp& type; };
|
|
|
|
template<typename _Tp>
|
|
struct __add_ref<_Tp&>
|
|
{ typedef _Tp& type; };
|
|
|
|
// Class used in the implementation of get
|
|
template<int __i, typename _Tp>
|
|
struct __get_helper;
|
|
|
|
// Returns a const reference to the ith element of a tuple.
|
|
// Any const or non-const ref elements are returned with their original type.
|
|
|
|
// This class helps construct the various comparison operations on tuples
|
|
template<int __check_equal_size, int __i, int __j, typename _Tp, typename _Up>
|
|
struct __tuple_compare;
|
|
|
|
// Helper which adds a reference to a type when given a reference_wrapper
|
|
template<typename _Tp>
|
|
struct __strip_reference_wrapper
|
|
{
|
|
typedef _Tp __type;
|
|
};
|
|
|
|
template<typename _Tp>
|
|
struct __strip_reference_wrapper<reference_wrapper<_Tp> >
|
|
{
|
|
typedef _Tp& __type;
|
|
};
|
|
|
|
template<typename _Tp>
|
|
struct __strip_reference_wrapper<const reference_wrapper<_Tp> >
|
|
{
|
|
typedef _Tp& __type;
|
|
};
|
|
|
|
#include "tuple_defs.h"
|
|
|
|
template<int __i, int __j, typename _Tp, typename _Up>
|
|
struct __tuple_compare<0, __i, __j, _Tp, _Up>
|
|
{
|
|
static bool __eq(const _Tp& __t, const _Up& __u)
|
|
{
|
|
return get<__i>(__t) == get<__i>(__u) &&
|
|
__tuple_compare<0, __i+1, __j, _Tp, _Up>::__eq(__t, __u);
|
|
}
|
|
static bool __less(const _Tp& __t, const _Up& __u)
|
|
{
|
|
return (get<__i>(__t) < get<__i>(__u)) || !(get<__i>(__u) < get<__i>(__t)) &&
|
|
__tuple_compare<0, __i+1, __j, _Tp, _Up>::__less(__t, __u);
|
|
}
|
|
};
|
|
|
|
template<int __i, typename _Tp, typename _Up>
|
|
struct __tuple_compare<0, __i, __i, _Tp, _Up>
|
|
{
|
|
static bool __eq(const _Tp&, const _Up&)
|
|
{ return true; }
|
|
static bool __less(const _Tp&, const _Up&)
|
|
{ return false; }
|
|
};
|
|
|
|
// A class (and instance) which can be used in 'tie' when an element
|
|
// of a tuple is not required
|
|
struct swallow_assign
|
|
{
|
|
template<class T>
|
|
swallow_assign&
|
|
operator=(const T&)
|
|
{ return *this; }
|
|
};
|
|
|
|
// TODO: Put this in some kind of shared file.
|
|
namespace
|
|
{
|
|
swallow_assign ignore;
|
|
}; // anonymous namespace
|
|
|
|
_GLIBCXX_END_NAMESPACE
|
|
}
|
|
|
|
#define _GLIBCXX_CAT(x,y) _GLIBCXX_CAT2(x,y)
|
|
#define _GLIBCXX_CAT2(x,y) x##y
|
|
#define _SHORT_REPEAT
|
|
#define _GLIBCXX_REPEAT_HEADER <tr1/tuple_iterate.h>
|
|
#include <tr1/repeat.h>
|
|
#undef _GLIBCXX_REPEAT_HEADER
|
|
#undef _SHORT_REPEAT
|
|
|
|
#include <tr1/functional>
|
|
|
|
#endif
|