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