// ----------------------------------------------------------------------------
// group.hpp : encapsulates a group of manipulators along with an argument
// ----------------------------------------------------------------------------
// Copyright Samuel Krempp 2003. Use, modification, and distribution are
// 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)
// See http://www.boost.org/libs/format for library home page
// ----------------------------------------------------------------------------
// group_head : cut the last element of a group out.
// (is overloaded below on each type of group)
// group_last : returns the last element of a group
// (is overloaded below on each type of group)
// ----------------------------------------------------------------------------
#ifndef BOOST_FORMAT_GROUP_HPP
#define BOOST_FORMAT_GROUP_HPP
#include
namespace boost {
namespace io {
namespace detail {
// empty group, but useful even though.
struct group0
{
group0() {}
};
template
inline
BOOST_IO_STD basic_ostream&
operator << ( BOOST_IO_STD basic_ostream& os,
const group0& )
{
return os;
}
template
struct group1
{
T1 a1_;
group1(T1 a1)
: a1_(a1)
{}
private:
group1& operator=(const group1&);
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group1& x)
{
os << x.a1_;
return os;
}
template
struct group2
{
T1 a1_;
T2 a2_;
group2(T1 a1,T2 a2)
: a1_(a1),a2_(a2)
{}
private:
group2& operator=(const group2&);
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group2& x)
{
os << x.a1_<< x.a2_;
return os;
}
template
struct group3
{
T1 a1_;
T2 a2_;
T3 a3_;
group3(T1 a1,T2 a2,T3 a3)
: a1_(a1),a2_(a2),a3_(a3)
{}
private:
group3& operator=(const group3&);
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group3& x)
{
os << x.a1_<< x.a2_<< x.a3_;
return os;
}
template
struct group4
{
T1 a1_;
T2 a2_;
T3 a3_;
T4 a4_;
group4(T1 a1,T2 a2,T3 a3,T4 a4)
: a1_(a1),a2_(a2),a3_(a3),a4_(a4)
{}
private:
group4& operator=(const group4&);
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group4& x)
{
os << x.a1_<< x.a2_<< x.a3_<< x.a4_;
return os;
}
template
struct group5
{
T1 a1_;
T2 a2_;
T3 a3_;
T4 a4_;
T5 a5_;
group5(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5)
: a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5)
{}
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group5& x)
{
os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_;
return os;
}
template
struct group6
{
T1 a1_;
T2 a2_;
T3 a3_;
T4 a4_;
T5 a5_;
T6 a6_;
group6(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6)
: a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6)
{}
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group6& x)
{
os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_;
return os;
}
template
struct group7
{
T1 a1_;
T2 a2_;
T3 a3_;
T4 a4_;
T5 a5_;
T6 a6_;
T7 a7_;
group7(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7)
: a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7)
{}
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group7& x)
{
os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_;
return os;
}
template
struct group8
{
T1 a1_;
T2 a2_;
T3 a3_;
T4 a4_;
T5 a5_;
T6 a6_;
T7 a7_;
T8 a8_;
group8(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8)
: a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8)
{}
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group8& x)
{
os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_;
return os;
}
template
struct group9
{
T1 a1_;
T2 a2_;
T3 a3_;
T4 a4_;
T5 a5_;
T6 a6_;
T7 a7_;
T8 a8_;
T9 a9_;
group9(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9)
: a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8),a9_(a9)
{}
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group9& x)
{
os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_;
return os;
}
template
struct group10
{
T1 a1_;
T2 a2_;
T3 a3_;
T4 a4_;
T5 a5_;
T6 a6_;
T7 a7_;
T8 a8_;
T9 a9_;
T10 a10_;
group10(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9,T10 a10)
: a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8),a9_(a9),a10_(a10)
{}
};
template
inline
BOOST_IO_STD basic_ostream&
operator << (BOOST_IO_STD basic_ostream& os,
const group10& x)
{
os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_<< x.a10_;
return os;
}
template
inline
group1
group_head( group2 const& x)
{
return group1 (x.a1_);
}
template
inline
group1
group_last( group2 const& x)
{
return group1 (x.a2_);
}
template
inline
group2
group_head( group3 const& x)
{
return group2 (x.a1_,x.a2_);
}
template
inline
group1
group_last( group3 const& x)
{
return group1 (x.a3_);
}
template
inline
group3
group_head( group4 const& x)
{
return group3 (x.a1_,x.a2_,x.a3_);
}
template
inline
group1
group_last( group4 const& x)
{
return group1 (x.a4_);
}
template
inline
group4
group_head( group5 const& x)
{
return group4 (x.a1_,x.a2_,x.a3_,x.a4_);
}
template
inline
group1
group_last( group5 const& x)
{
return group1 (x.a5_);
}
template
inline
group5
group_head( group6 const& x)
{
return group5 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_);
}
template
inline
group1
group_last( group6 const& x)
{
return group1 (x.a6_);
}
template
inline
group6
group_head( group7 const& x)
{
return group6 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_);
}
template
inline
group1
group_last( group7 const& x)
{
return group1 (x.a7_);
}
template
inline
group7
group_head( group8 const& x)
{
return group7 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_);
}
template
inline
group1
group_last( group8 const& x)
{
return group1 (x.a8_);
}
template
inline
group8
group_head( group9 const& x)
{
return group8 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_);
}
template
inline
group1
group_last( group9 const& x)
{
return group1 (x.a9_);
}
template
inline
group9
group_head( group10 const& x)
{
return group9 (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_,x.a9_);
}
template
inline
group1
group_last( group10 const& x)
{
return group1 (x.a10_);
}
} // namespace detail
// helper functions
inline detail::group1< detail::group0 >
group() { return detail::group1< detail::group0 > ( detail::group0() ); }
template
inline
detail::group1< detail::group2 >
group(T1 a1, Var const& var)
{
return detail::group1< detail::group2 >
( detail::group2
(a1, var)
);
}
template
inline
detail::group1< detail::group3 >
group(T1 a1,T2 a2, Var const& var)
{
return detail::group1< detail::group3 >
( detail::group3
(a1,a2, var)
);
}
template
inline
detail::group1< detail::group4 >
group(T1 a1,T2 a2,T3 a3, Var const& var)
{
return detail::group1< detail::group4 >
( detail::group4
(a1,a2,a3, var)
);
}
template
inline
detail::group1< detail::group5 >
group(T1 a1,T2 a2,T3 a3,T4 a4, Var const& var)
{
return detail::group1< detail::group5 >
( detail::group5
(a1,a2,a3,a4, var)
);
}
template
inline
detail::group1< detail::group6 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var const& var)
{
return detail::group1< detail::group6 >
( detail::group6
(a1,a2,a3,a4,a5, var)
);
}
template
inline
detail::group1< detail::group7 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var const& var)
{
return detail::group1< detail::group7 >
( detail::group7
(a1,a2,a3,a4,a5,a6, var)
);
}
template
inline
detail::group1< detail::group8 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var const& var)
{
return detail::group1< detail::group8 >
( detail::group8
(a1,a2,a3,a4,a5,a6,a7, var)
);
}
template
inline
detail::group1< detail::group9 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var const& var)
{
return detail::group1< detail::group9 >
( detail::group9
(a1,a2,a3,a4,a5,a6,a7,a8, var)
);
}
template
inline
detail::group1< detail::group10 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9, Var const& var)
{
return detail::group1< detail::group10 >
( detail::group10
(a1,a2,a3,a4,a5,a6,a7,a8,a9, var)
);
}
#ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST
template
inline
detail::group1< detail::group2 >
group(T1 a1, Var& var)
{
return detail::group1< detail::group2 >
( detail::group2
(a1, var)
);
}
template
inline
detail::group1< detail::group3 >
group(T1 a1,T2 a2, Var& var)
{
return detail::group1< detail::group3 >
( detail::group3
(a1,a2, var)
);
}
template
inline
detail::group1< detail::group4 >
group(T1 a1,T2 a2,T3 a3, Var& var)
{
return detail::group1< detail::group4 >
( detail::group4
(a1,a2,a3, var)
);
}
template
inline
detail::group1< detail::group5 >
group(T1 a1,T2 a2,T3 a3,T4 a4, Var& var)
{
return detail::group1< detail::group5 >
( detail::group5
(a1,a2,a3,a4, var)
);
}
template
inline
detail::group1< detail::group6 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var& var)
{
return detail::group1< detail::group6 >
( detail::group6
(a1,a2,a3,a4,a5, var)
);
}
template
inline
detail::group1< detail::group7 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var& var)
{
return detail::group1< detail::group7 >
( detail::group7
(a1,a2,a3,a4,a5,a6, var)
);
}
template
inline
detail::group1< detail::group8 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var& var)
{
return detail::group1< detail::group8 >
( detail::group8
(a1,a2,a3,a4,a5,a6,a7, var)
);
}
template
inline
detail::group1< detail::group9 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var& var)
{
return detail::group1< detail::group9 >
( detail::group9
(a1,a2,a3,a4,a5,a6,a7,a8, var)
);
}
template
inline
detail::group1< detail::group10 >
group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9, Var& var)
{
return detail::group1< detail::group10 >
( detail::group10
(a1,a2,a3,a4,a5,a6,a7,a8,a9, var)
);
}
#endif // - BOOST_NO_OVERLOAD_FOR_NON_CONST
} // namespace io
} // namespace boost
#endif // BOOST_FORMAT_GROUP_HPP