DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
/*============================================================================= Phoenix V1.2.1 Copyright (c) 2001-2002 Joel de Guzman Use, modification and distribution is subject to 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 PHOENIX_TUPLES_HPP #define PHOENIX_TUPLES_HPP #if defined(BOOST_MSVC) && (BOOST_MSVC <= 1300) #error "Sorry, Phoenix does not support VC6 and VC7. Please upgrade to at least VC7.1" #endif /////////////////////////////////////////////////////////////////////////////// // // Phoenix predefined maximum limit. This limit defines the maximum // number of elements a tuple can hold. This number defaults to 3. The // actual maximum is rounded up in multiples of 3. Thus, if this value // is 4, the actual limit is 6. The ultimate maximum limit in this // implementation is 15. // /////////////////////////////////////////////////////////////////////////////// #ifndef PHOENIX_LIMIT #define PHOENIX_LIMIT 3 #endif #if defined(__BORLANDC__) && (__BORLANDC__ <= 0x561) namespace phoenix { namespace borland_only { namespace ftors { // We define these dummy template functions. Borland complains when // a template class has the same name as a template function, // regardless if they are in different namespaces. template
void if_(T) {} template
void for_(T) {} template
void while_(T) {} template
void do_(T) {} } namespace tmpls { // We define these dummy template functions. Borland complains when // a template class has the same name as a template function, // regardless if they are in different namespaces. template
struct if_ {}; template
struct for_ {}; template
struct while_ {}; template
struct do_ {}; } }} // namespace phoenix::borland_only #endif /////////////////////////////////////////////////////////////////////////////// #include
#include
#include
/////////////////////////////////////////////////////////////////////////////// namespace phoenix { /////////////////////////////////////////////////////////////////////////////// // // tuple // // Tuples hold heterogeneous types up to a predefined maximum. Only // the most basic functionality needed is provided. Unlike other // recursive list-like tuple implementations, this tuple // implementation uses simple structs similar to std::pair with // specialization for 0 to N tuple elements. // // 1) Construction // Here are examples on how to construct tuples: // // typedef tuple
t1_t; // typedef tuple
t2_t; // // // this tuple has an int and char members // t1_t t1(3, 'c'); // // // this tuple has an int, std::string and double members // t2_t t2(3, "hello", 3.14); // // Tuples can also be constructed from other tuples. The // source and destination tuples need not have exactly the // same element types. The only requirement is that the // source tuple have the same number of elements as the // destination and that each element slot in the // destination can be copy constructed from the source // element. For example: // // tuple
t3(t1); // OK. Compatible tuples // tuple
t4(t2); // Error! Incompatible tuples // // 2) Member access // A member in a tuple can be accessed using the // tuple's [] operator by specifying the Nth // tuple_index. Here are some examples: // // tuple_index<0> ix0; // 0th index == 1st item // tuple_index<1> ix1; // 1st index == 2nd item // tuple_index<2> ix2; // 2nd index == 3rd item // // t1[ix0] = 33; // sets the int member of the tuple t1 // t2[ix2] = 6e6; // sets the double member of the tuple t2 // t1[ix1] = 'a'; // sets the char member of the tuple t1 // // There are some predefined names are provided in sub- // namespace tuple_index_names: // // tuple_index<0> _1; // tuple_index<1> _2; // ... // tuple_index
_N; // // These indexes may be used by 'using' namespace // phoenix::tuple_index_names. // // Access to out of bound indexes returns a nil_t value. // // 3) Member type inquiry // The type of an individual member can be queried. // Example: // // tuple_element<1, t2_t>::type // // Refers to the type of the second member (note zero based, // thus 0 = 1st item, 1 = 2nd item) of the tuple. // // Aside from tuple_element
::type, there are two // more types that tuple_element provides: rtype and // crtype. While 'type' is the plain underlying type, // 'rtype' is the reference type, or type& and 'crtype' // is the constant reference type or type const&. The // latter two are provided to make it easy for the // client in dealing with the possibility of reference // to reference when type is already a reference, which // is illegal in C++. // // Access to out of bound indexes returns a nil_t type. // // 4) Tuple length // The number of elements in a tuple can be queried. // Example: // // int n = t1.length; // // gets the number of elements in tuple t1. // // length is a static constant. Thus, TupleT::length // also works. Example: // // int n = t1_t::length; // /////////////////////////////////////////////////////////////////////////////// struct nil_t {}; using boost::remove_reference; using boost::call_traits; ////////////////////////////////// namespace impl { template
struct access { typedef const T& ctype; typedef T& type; }; template
struct access
{ typedef T& ctype; typedef T& type; }; } /////////////////////////////////////////////////////////////////////////////// // // tuple_element // // A query class that gets the Nth element inside a tuple. // Examples: // // tuple_element<1, tuple
>::type // plain // tuple_element<1, tuple
>::rtype // ref // tuple_element<1, tuple
>::crtype // const ref // // Has type char which is the 2nd type in the tuple // (note zero based, thus 0 = 1st item, 1 = 2nd item). // // Given a tuple object, the static function tuple_element
::get(tuple) gets the Nth element in the tuple. The // tuple class' tuple::operator[] uses this to get its Nth // element. // /////////////////////////////////////////////////////////////////////////////// template
struct tuple_element { typedef nil_t type; typedef nil_t& rtype; typedef nil_t const& crtype; static nil_t get(TupleT const& t) { return nil_t(); } }; ////////////////////////////////// template
struct tuple_element<0, TupleT> { typedef typename TupleT::a_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.a; } static crtype get(TupleT const& t) { return t.a; } }; ////////////////////////////////// template
struct tuple_element<1, TupleT> { typedef typename TupleT::b_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.b; } static crtype get(TupleT const& t) { return t.b; } }; ////////////////////////////////// template
struct tuple_element<2, TupleT> { typedef typename TupleT::c_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.c; } static crtype get(TupleT const& t) { return t.c; } }; #if PHOENIX_LIMIT > 3 ////////////////////////////////// template
struct tuple_element<3, TupleT> { typedef typename TupleT::d_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.d; } static crtype get(TupleT const& t) { return t.d; } }; ////////////////////////////////// template
struct tuple_element<4, TupleT> { typedef typename TupleT::e_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.e; } static crtype get(TupleT const& t) { return t.e; } }; ////////////////////////////////// template
struct tuple_element<5, TupleT> { typedef typename TupleT::f_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.f; } static crtype get(TupleT const& t) { return t.f; } }; #if PHOENIX_LIMIT > 6 ////////////////////////////////// template
struct tuple_element<6, TupleT> { typedef typename TupleT::g_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.g; } static crtype get(TupleT const& t) { return t.g; } }; ////////////////////////////////// template
struct tuple_element<7, TupleT> { typedef typename TupleT::h_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.h; } static crtype get(TupleT const& t) { return t.h; } }; ////////////////////////////////// template
struct tuple_element<8, TupleT> { typedef typename TupleT::i_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.i; } static crtype get(TupleT const& t) { return t.i; } }; #if PHOENIX_LIMIT > 9 ////////////////////////////////// template
struct tuple_element<9, TupleT> { typedef typename TupleT::j_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.j; } static crtype get(TupleT const& t) { return t.j; } }; ////////////////////////////////// template
struct tuple_element<10, TupleT> { typedef typename TupleT::k_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.k; } static crtype get(TupleT const& t) { return t.k; } }; ////////////////////////////////// template
struct tuple_element<11, TupleT> { typedef typename TupleT::l_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.l; } static crtype get(TupleT const& t) { return t.l; } }; #if PHOENIX_LIMIT > 12 ////////////////////////////////// template
struct tuple_element<12, TupleT> { typedef typename TupleT::m_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.m; } static crtype get(TupleT const& t) { return t.m; } }; ////////////////////////////////// template
struct tuple_element<13, TupleT> { typedef typename TupleT::n_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.n; } static crtype get(TupleT const& t) { return t.n; } }; ////////////////////////////////// template
struct tuple_element<14, TupleT> { typedef typename TupleT::o_type type; typedef typename impl::access
::type rtype; typedef typename impl::access
::ctype crtype; static rtype get(TupleT& t) { return t.o; } static crtype get(TupleT const& t) { return t.o; } }; #endif #endif #endif #endif /////////////////////////////////////////////////////////////////////////////// // // tuple forward declaration. // /////////////////////////////////////////////////////////////////////////////// template < typename A = nil_t , typename B = nil_t , typename C = nil_t #if PHOENIX_LIMIT > 3 , typename D = nil_t , typename E = nil_t , typename F = nil_t #if PHOENIX_LIMIT > 6 , typename G = nil_t , typename H = nil_t , typename I = nil_t #if PHOENIX_LIMIT > 9 , typename J = nil_t , typename K = nil_t , typename L = nil_t #if PHOENIX_LIMIT > 12 , typename M = nil_t , typename N = nil_t , typename O = nil_t #endif #endif #endif #endif , typename NU = nil_t // Not used > struct tuple; /////////////////////////////////////////////////////////////////////////////// // // tuple_index // // This class wraps an integer in a type to be used for indexing // the Nth element in a tuple. See tuple operator[]. Some // predefined names are provided in sub-namespace // tuple_index_names. // /////////////////////////////////////////////////////////////////////////////// template
struct tuple_index {}; ////////////////////////////////// namespace tuple_index_names { tuple_index<0> const _1 = tuple_index<0>(); tuple_index<1> const _2 = tuple_index<1>(); tuple_index<2> const _3 = tuple_index<2>(); #if PHOENIX_LIMIT > 3 tuple_index<3> const _4 = tuple_index<3>(); tuple_index<4> const _5 = tuple_index<4>(); tuple_index<5> const _6 = tuple_index<5>(); #if PHOENIX_LIMIT > 6 tuple_index<6> const _7 = tuple_index<6>(); tuple_index<7> const _8 = tuple_index<7>(); tuple_index<8> const _9 = tuple_index<8>(); #if PHOENIX_LIMIT > 9 tuple_index<9> const _10 = tuple_index<9>(); tuple_index<10> const _11 = tuple_index<10>(); tuple_index<11> const _12 = tuple_index<11>(); #if PHOENIX_LIMIT > 12 tuple_index<12> const _13 = tuple_index<12>(); tuple_index<13> const _14 = tuple_index<13>(); tuple_index<14> const _15 = tuple_index<14>(); #endif #endif #endif #endif } /////////////////////////////////////////////////////////////////////////////// // // tuple_common class // /////////////////////////////////////////////////////////////////////////////// template
struct tuple_base { typedef nil_t a_type; typedef nil_t b_type; typedef nil_t c_type; #if PHOENIX_LIMIT > 3 typedef nil_t d_type; typedef nil_t e_type; typedef nil_t f_type; #if PHOENIX_LIMIT > 6 typedef nil_t g_type; typedef nil_t h_type; typedef nil_t i_type; #if PHOENIX_LIMIT > 9 typedef nil_t j_type; typedef nil_t k_type; typedef nil_t l_type; #if PHOENIX_LIMIT > 12 typedef nil_t m_type; typedef nil_t n_type; typedef nil_t o_type; #endif #endif #endif #endif template
typename tuple_element
::crtype operator[](tuple_index
) const { return tuple_element
::get(*static_cast
(this)); } template
typename tuple_element
::rtype operator[](tuple_index
) { return tuple_element
::get(*static_cast
(this)); } }; /////////////////////////////////////////////////////////////////////////////// // // tuple <0 member> class // /////////////////////////////////////////////////////////////////////////////// template <> struct tuple<> : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 0); }; /////////////////////////////////////////////////////////////////////////////// // // tuple <1 member> class // /////////////////////////////////////////////////////////////////////////////// template
struct tuple
3 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 1); typedef A a_type; tuple() {} tuple( typename call_traits
::param_type a_ ): a(a_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <2 member> class // /////////////////////////////////////////////////////////////////////////////// template
struct tuple
3 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 2); typedef A a_type; typedef B b_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_ ): a(a_), b(b_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <3 member> class // /////////////////////////////////////////////////////////////////////////////// template
struct tuple
3 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 6 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 3); typedef A a_type; typedef B b_type; typedef C c_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_ ): a(a_), b(b_), c(c_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; }; #if PHOENIX_LIMIT > 3 /////////////////////////////////////////////////////////////////////////////// // // tuple <4 member> class // /////////////////////////////////////////////////////////////////////////////// template
struct tuple
6 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 4); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_ ): a(a_), b(b_), c(c_), d(d_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <5 member> class // /////////////////////////////////////////////////////////////////////////////// template
struct tuple
6 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 5); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_ ): a(a_), b(b_), c(c_), d(d_), e(e_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <6 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F> struct tuple
6 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 6); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; }; #if PHOENIX_LIMIT > 6 /////////////////////////////////////////////////////////////////////////////// // // tuple <7 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G> struct tuple
9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 7); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <8 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H> struct tuple
9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 8); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; typedef H h_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_, typename call_traits
::param_type h_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]), h(init[tuple_index<7>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g; H h; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <9 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I> struct tuple
9 nil_t, nil_t, nil_t, #if PHOENIX_LIMIT > 12 nil_t, nil_t, nil_t, #endif #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 9); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; typedef H h_type; typedef I i_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_, typename call_traits
::param_type h_, typename call_traits
::param_type i_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_), i(i_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]), h(init[tuple_index<7>()]), i(init[tuple_index<8>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g; H h; I i; }; #if PHOENIX_LIMIT > 9 /////////////////////////////////////////////////////////////////////////////// // // tuple <10 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J> struct tuple
12 nil_t, nil_t, nil_t, #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 10); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; typedef H h_type; typedef I i_type; typedef J j_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_, typename call_traits
::param_type h_, typename call_traits
::param_type i_, typename call_traits
::param_type j_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_), i(i_), j(j_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]), h(init[tuple_index<7>()]), i(init[tuple_index<8>()]), j(init[tuple_index<9>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <11 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K> struct tuple
12 nil_t, nil_t, nil_t, #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 11); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; typedef H h_type; typedef I i_type; typedef J j_type; typedef K k_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_, typename call_traits
::param_type h_, typename call_traits
::param_type i_, typename call_traits
::param_type j_, typename call_traits
::param_type k_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_), i(i_), j(j_), k(k_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]), h(init[tuple_index<7>()]), i(init[tuple_index<8>()]), j(init[tuple_index<9>()]), k(init[tuple_index<10>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; K k; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <12 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L> struct tuple
12 nil_t, nil_t, nil_t, #endif nil_t // Unused > : public tuple_base
> { BOOST_STATIC_CONSTANT(int, length = 12); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; typedef H h_type; typedef I i_type; typedef J j_type; typedef K k_type; typedef L l_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_, typename call_traits
::param_type h_, typename call_traits
::param_type i_, typename call_traits
::param_type j_, typename call_traits
::param_type k_, typename call_traits
::param_type l_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_), i(i_), j(j_), k(k_), l(l_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]), h(init[tuple_index<7>()]), i(init[tuple_index<8>()]), j(init[tuple_index<9>()]), k(init[tuple_index<10>()]), l(init[tuple_index<11>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; K k; L l; }; #if PHOENIX_LIMIT > 12 /////////////////////////////////////////////////////////////////////////////// // // tuple <13 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L, typename M> struct tuple
: public tuple_base< tuple
> { BOOST_STATIC_CONSTANT(int, length = 13); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; typedef H h_type; typedef I i_type; typedef J j_type; typedef K k_type; typedef L l_type; typedef M m_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_, typename call_traits
::param_type h_, typename call_traits
::param_type i_, typename call_traits
::param_type j_, typename call_traits
::param_type k_, typename call_traits
::param_type l_, typename call_traits
::param_type m_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_), i(i_), j(j_), k(k_), l(l_), m(m_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]), h(init[tuple_index<7>()]), i(init[tuple_index<8>()]), j(init[tuple_index<9>()]), k(init[tuple_index<10>()]), l(init[tuple_index<11>()]), m(init[tuple_index<12>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; K k; L l; M m; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <14 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L, typename M, typename N> struct tuple
: public tuple_base< tuple
> { BOOST_STATIC_CONSTANT(int, length = 14); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; typedef H h_type; typedef I i_type; typedef J j_type; typedef K k_type; typedef L l_type; typedef M m_type; typedef N n_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_, typename call_traits
::param_type h_, typename call_traits
::param_type i_, typename call_traits
::param_type j_, typename call_traits
::param_type k_, typename call_traits
::param_type l_, typename call_traits
::param_type m_, typename call_traits
::param_type n_ ): a(a_), b(b_), c(c_), d(d_), e(e_), f(f_), g(g_), h(h_), i(i_), j(j_), k(k_), l(l_), m(m_), n(n_) {} template
tuple(TupleT const& init) : a(init[tuple_index<0>()]), b(init[tuple_index<1>()]), c(init[tuple_index<2>()]), d(init[tuple_index<3>()]), e(init[tuple_index<4>()]), f(init[tuple_index<5>()]), g(init[tuple_index<6>()]), h(init[tuple_index<7>()]), i(init[tuple_index<8>()]), j(init[tuple_index<9>()]), k(init[tuple_index<10>()]), l(init[tuple_index<11>()]), m(init[tuple_index<12>()]), n(init[tuple_index<13>()]) { BOOST_STATIC_ASSERT(TupleT::length == length); } A a; B b; C c; D d; E e; F f; G g; H h; I i; J j; K k; L l; M m; N n; }; /////////////////////////////////////////////////////////////////////////////// // // tuple <15 member> class // /////////////////////////////////////////////////////////////////////////////// template < typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L, typename M, typename N, typename O> struct tuple
: public tuple_base< tuple
> { BOOST_STATIC_CONSTANT(int, length = 15); typedef A a_type; typedef B b_type; typedef C c_type; typedef D d_type; typedef E e_type; typedef F f_type; typedef G g_type; typedef H h_type; typedef I i_type; typedef J j_type; typedef K k_type; typedef L l_type; typedef M m_type; typedef N n_type; typedef O o_type; tuple() {} tuple( typename call_traits
::param_type a_, typename call_traits
::param_type b_, typename call_traits
::param_type c_, typename call_traits
::param_type d_, typename call_traits
::param_type e_, typename call_traits
::param_type f_, typename call_traits
::param_type g_, typename call_traits
::param_type h_, typename call_traits
::param_type i_, typename call_traits
::param_type j_, typename call_traits
::param_type k_, typename call_traits
::param_type l_, typename call_traits
::param_type m_, typename call_traits
::param_type n_, typename call_traits