annotate DEPENDENCIES/generic/include/boost/fusion/sequence/io/detail/out.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 1999-2003 Jaakko Jarvi
Chris@16 3 Copyright (c) 1999-2003 Jeremiah Willcock
Chris@16 4 Copyright (c) 2001-2011 Joel de Guzman
Chris@16 5
Chris@16 6 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8 ==============================================================================*/
Chris@16 9 #if !defined(FUSION_OUT_05052005_0121)
Chris@16 10 #define FUSION_OUT_05052005_0121
Chris@16 11
Chris@101 12 #include <boost/fusion/support/config.hpp>
Chris@16 13 #include <ostream>
Chris@16 14 #include <boost/fusion/sequence/io/detail/manip.hpp>
Chris@16 15
Chris@16 16 #include <boost/mpl/bool.hpp>
Chris@16 17 #include <boost/fusion/sequence/intrinsic/begin.hpp>
Chris@16 18 #include <boost/fusion/sequence/intrinsic/end.hpp>
Chris@16 19 #include <boost/fusion/iterator/deref.hpp>
Chris@16 20 #include <boost/fusion/iterator/next.hpp>
Chris@16 21 #include <boost/fusion/iterator/equal_to.hpp>
Chris@16 22
Chris@16 23 namespace boost { namespace fusion { namespace detail
Chris@16 24 {
Chris@16 25 template <typename Tag>
Chris@16 26 struct delimiter_out
Chris@16 27 {
Chris@16 28 // print a delimiter
Chris@16 29 template <typename OS>
Chris@16 30 static void
Chris@16 31 print(OS& os, char const* delim, mpl::false_ = mpl::false_())
Chris@16 32 {
Chris@16 33 detail::string_ios_manip<Tag, OS> manip(os);
Chris@16 34 manip.print(delim);
Chris@16 35 }
Chris@16 36
Chris@16 37 template <typename OS>
Chris@16 38 static void
Chris@16 39 print(OS&, char const*, mpl::true_)
Chris@16 40 {
Chris@16 41 }
Chris@16 42 };
Chris@16 43
Chris@16 44 struct print_sequence_loop
Chris@16 45 {
Chris@16 46 template <typename OS, typename First, typename Last>
Chris@16 47 static void
Chris@16 48 call(OS&, First const&, Last const&, mpl::true_)
Chris@16 49 {
Chris@16 50 }
Chris@16 51
Chris@16 52 template <typename OS, typename First, typename Last>
Chris@16 53 static void
Chris@16 54 call(OS& os, First const& first, Last const& last, mpl::false_)
Chris@16 55 {
Chris@16 56 result_of::equal_to<
Chris@16 57 typename result_of::next<First>::type
Chris@16 58 , Last
Chris@16 59 >
Chris@16 60 is_last;
Chris@16 61
Chris@16 62 os << *first;
Chris@16 63 delimiter_out<tuple_delimiter_tag>::print(os, " ", is_last);
Chris@16 64 call(os, fusion::next(first), last, is_last);
Chris@16 65 }
Chris@16 66
Chris@16 67 template <typename OS, typename First, typename Last>
Chris@16 68 static void
Chris@16 69 call(OS& os, First const& first, Last const& last)
Chris@16 70 {
Chris@16 71 result_of::equal_to<First, Last> eq;
Chris@16 72 call(os, first, last, eq);
Chris@16 73 }
Chris@16 74 };
Chris@16 75
Chris@16 76 template <typename OS, typename Sequence>
Chris@16 77 inline void
Chris@16 78 print_sequence(OS& os, Sequence const& seq)
Chris@16 79 {
Chris@16 80 delimiter_out<tuple_open_tag>::print(os, "(");
Chris@16 81 print_sequence_loop::call(os, fusion::begin(seq), fusion::end(seq));
Chris@16 82 delimiter_out<tuple_close_tag>::print(os, ")");
Chris@16 83 }
Chris@16 84 }}}
Chris@16 85
Chris@16 86 #endif