// ---------------------------------------------------------------------------- // 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