/*============================================================================= Copyright (c) 2011-2017 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under 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 TESTSPR_PRINT_HPP #define TESTSPR_PRINT_HPP #include #include #include #include #include #include #include #include #include #include namespace testspr { // // print // inline SPROUT_NON_CONSTEXPR void print() {} template inline SPROUT_NON_CONSTEXPR void print(Head const& head, Tail const&... tail) { std::cout << head; testspr::print(tail...); } // // print_ln // inline SPROUT_NON_CONSTEXPR void print_ln() { std::cout << std::endl; } template inline SPROUT_NON_CONSTEXPR void print_ln(Args const&... args) { sprout::detail::io::ios_all_saver saver(std::cout); testspr::print(args...); std::cout << std::endl; } // // print_tokens // inline SPROUT_NON_CONSTEXPR void print_tokens() { testspr::print_ln(); } template inline SPROUT_NON_CONSTEXPR void print_tokens(Head const& head, Tail const&... tail) { sprout::detail::io::ios_all_saver saver(std::cout); testspr::print(head, ' '); testspr::print_tokens(tail...); } // // print_quotes // inline SPROUT_NON_CONSTEXPR void print_quotes() { testspr::print_ln(); } template inline SPROUT_NON_CONSTEXPR void print_quotes(Head const& head, Tail const&... tail) { sprout::detail::io::ios_all_saver saver(std::cout); testspr::print('\"', head, "\" "); testspr::print_quotes(tail...); } // // print_range // template inline SPROUT_NON_CONSTEXPR void print_range(InputIterator first, InputIterator last) { sprout::detail::io::ios_all_saver saver(std::cout); for (; first != last; ++first) { std::cout << *first << ' '; } std::cout << std::endl; } template inline SPROUT_NON_CONSTEXPR void print_range(InputRange const& range) { testspr::print_range(sprout::begin(range), sprout::end(range)); } // // print_bits // template inline SPROUT_NON_CONSTEXPR void print_bits(T const& t) { testspr::print_ln(std::bitset(t).template to_string()); } // // print_typename // template inline SPROUT_NON_CONSTEXPR void print_typename() { testspr::print_ln(testspr::typename_of()); } // // print_type // template inline SPROUT_NON_CONSTEXPR void print_type() { testspr::print_ln(testspr::qualified_typename_of()); } // // print_hl // inline SPROUT_NON_CONSTEXPR void print_hl() { testspr::print_ln("--------------------------------------------------------------------------------"); } // // manip_holder // template class manip_holder { public: typedef T value_type; private: value_type m_; public: SPROUT_CONSTEXPR manip_holder(value_type const& m) : m_(m) {} SPROUT_CONSTEXPR value_type const& get() const { return m_; } }; template inline SPROUT_NON_CONSTEXPR std::basic_ostream& operator<<(std::basic_ostream& lhs, testspr::manip_holder const& rhs) { return lhs << rhs.get(); } template inline SPROUT_NON_CONSTEXPR std::basic_istream& operator>>(std::basic_istream& lhs, testspr::manip_holder const& rhs) { return lhs >> rhs.get(); } // // manip // template inline SPROUT_NON_CONSTEXPR T&& manip(T&& t) { return std::forward(t); } template inline SPROUT_NON_CONSTEXPR testspr::manip_holder& (*)(std::basic_ostream&)> manip(std::basic_ostream& (*pf)(std::basic_ostream&)) { return pf; } template inline SPROUT_NON_CONSTEXPR testspr::manip_holder& (*)(std::basic_ios&)> manip(std::basic_ios& (*pf)(std::basic_ios&)) { return pf; } inline SPROUT_NON_CONSTEXPR testspr::manip_holder manip(std::ios_base& (*pf)(std::ios_base&)) { return pf; } } // namespace testspr #endif // #ifndef TESTSPR_PRINT_HPP