epoc32/include/stdapis/boost/preprocessor/tuple.hpp
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 2fe1408b6811
child 4 837f303aceeb
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/epoc32/include/stdapis/boost/preprocessor/tuple.hpp	Wed Mar 31 12:27:01 2010 +0100
     1.3 @@ -0,0 +1,90 @@
     1.4 +//  tuple.hpp - Boost Tuple Library --------------------------------------
     1.5 +
     1.6 +// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
     1.7 +//
     1.8 +// Distributed under the Boost Software License, Version 1.0. (See
     1.9 +// accompanying file LICENSE_1_0.txt or copy at
    1.10 +// http://www.boost.org/LICENSE_1_0.txt)
    1.11 +
    1.12 +// For more information, see http://www.boost.org
    1.13 +
    1.14 +// ----------------------------------------------------------------- 
    1.15 +
    1.16 +#ifndef BOOST_TUPLE_HPP
    1.17 +#define BOOST_TUPLE_HPP
    1.18 +
    1.19 +#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730
    1.20 +// Work around a compiler bug.
    1.21 +// boost::python::tuple has to be seen by the compiler before the
    1.22 +// boost::tuple class template.
    1.23 +namespace boost { namespace python { class tuple; }}
    1.24 +#endif
    1.25 +
    1.26 +#include "boost/config.hpp"
    1.27 +#include "boost/static_assert.hpp"
    1.28 +
    1.29 +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
    1.30 +// The MSVC version
    1.31 +#include "boost/tuple/detail/tuple_basic_no_partial_spec.hpp"
    1.32 +
    1.33 +#else
    1.34 +// other compilers
    1.35 +#include "boost/ref.hpp"
    1.36 +#include "boost/tuple/detail/tuple_basic.hpp"
    1.37 +
    1.38 +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
    1.39 +
    1.40 +namespace boost {    
    1.41 +
    1.42 +using tuples::tuple;
    1.43 +using tuples::make_tuple;
    1.44 +using tuples::tie;
    1.45 +#if !defined(BOOST_NO_USING_TEMPLATE)
    1.46 +using tuples::get;
    1.47 +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
    1.48 +//
    1.49 +// The "using tuples::get" statement causes the
    1.50 +// Borland compiler to ICE, use forwarding
    1.51 +// functions instead:
    1.52 +//
    1.53 +template<int N, class HT, class TT>
    1.54 +inline typename tuples::access_traits<
    1.55 +                  typename tuples::element<N, tuples::cons<HT, TT> >::type
    1.56 +                >::non_const_type
    1.57 +get(tuples::cons<HT, TT>& c) {
    1.58 +  return tuples::get<N,HT,TT>(c);
    1.59 +} 
    1.60 +// get function for const cons-lists, returns a const reference to
    1.61 +// the element. If the element is a reference, returns the reference
    1.62 +// as such (that is, can return a non-const reference)
    1.63 +template<int N, class HT, class TT>
    1.64 +inline typename tuples::access_traits<
    1.65 +                  typename tuples::element<N, tuples::cons<HT, TT> >::type
    1.66 +                >::const_type
    1.67 +get(const tuples::cons<HT, TT>& c) {
    1.68 +  return tuples::get<N,HT,TT>(c);
    1.69 +}
    1.70 +#else  // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
    1.71 +//
    1.72 +// MSVC, using declarations don't mix with templates well,
    1.73 +// so use forwarding functions instead:
    1.74 +//
    1.75 +template<int N, typename Head, typename Tail>
    1.76 +typename tuples::detail::element_ref<N, tuples::cons<Head, Tail> >::RET
    1.77 +get(tuples::cons<Head, Tail>& t, tuples::detail::workaround_holder<N>* = 0)
    1.78 +{
    1.79 +   return tuples::detail::get_class<N>::get(t);
    1.80 +}
    1.81 +
    1.82 +template<int N, typename Head, typename Tail>
    1.83 +typename tuples::detail::element_const_ref<N, tuples::cons<Head, Tail> >::RET
    1.84 +get(const tuples::cons<Head, Tail>& t, tuples::detail::workaround_holder<N>* = 0)
    1.85 +{
    1.86 +   return tuples::detail::get_class<N>::get(t);
    1.87 +}
    1.88 +#endif // BOOST_NO_USING_TEMPLATE
    1.89 +   
    1.90 +} // end namespace boost
    1.91 +
    1.92 +
    1.93 +#endif // BOOST_TUPLE_HPP