14 #ifndef ECL_CONTAINERS_PUSH_AND_POP_FORMATTERS_HPP_ 15 #define ECL_CONTAINERS_PUSH_AND_POP_FORMATTERS_HPP_ 22 #include <ecl/config/macros.hpp> 23 #include <ecl/formatters/common.hpp> 24 #include <ecl/formatters/number.hpp> 25 #include <ecl/formatters/floats.hpp> 26 #include "../common/formatters.hpp" 27 #include "../push_and_pop.hpp" 65 template<
typename Type,
size_t N>
69 virtual ~PushAndPopFormatter()
105 template<
typename Byte,
size_t N>
116 BytePushAndPopFormatter() : ready_to_format(false)
127 push_and_pop_container = &push_and_pop;
128 ready_to_format =
true;
132 virtual ~BytePushAndPopFormatter()
144 template <
typename OutputStream,
typename CharType,
size_t M>
145 friend OutputStream& operator << (OutputStream& ostream, const BytePushAndPopFormatter<CharType,M> &formatter)
ecl_assert_throw_decl(StandardException);
149 bool ready_to_format;
156 template <
typename OutputStream,
typename CharType,
size_t M>
157 OutputStream& operator <<(OutputStream& ostream, const BytePushAndPopFormatter<CharType, M> &formatter)
161 "either there is no data available, or you have tried to use the " 162 "formatter more than once in a single streaming operation. " 163 "C++ produces unspecified results when functors are used multiply " 164 "in the same stream sequence, so this is not permitted here.") );
168 for (
unsigned int i = 0; i < formatter.push_and_pop_container->size(); ++i ) {
169 ostream << format((*(formatter.push_and_pop_container))[i]) <<
" ";
191 class ECL_PUBLIC PushAndPopFormatter< unsigned char,N >
195 return formatter(container);
Surpport push and pack operation.
#define LOC
Stringify the line of code you are at.
#define ecl_assert_throw(expression, exception)
Debug mode throw with a logical condition check.
Standard exception type, provides code location and error string.
#define ecl_assert_throw_decl(exception)
Assure throw exception declaration.