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