43 #include "rsc/rscexports.h"
62 const string& separator =
", ",
63 const string& close_brace =
")");
85 const string& first_separator =
"",
86 const string& last_separator =
"");
108 const string& close);
120 template<
typename Ch,
typename Tr,
typename T>
121 basic_ostream<Ch, Tr>&
122 operator<<(basic_ostream<Ch, Tr>& stream,
126 delete reinterpret_cast<detail::pair_style*> (stream.pword(
137 RSC_EXPORT
extern const detail::set_pair_style<detail::pair_style> pair_default;
138 RSC_EXPORT
extern const detail::set_pair_style<detail::pair_style>
143 template<
typename Ch,
typename Tr,
typename T>
144 basic_ostream<Ch, Tr>&
145 operator<<(basic_ostream<Ch, Tr>& stream,
146 const detail::set_element_sequence_style<T>& style) {
149 delete reinterpret_cast<detail::element_sequence_style*> (stream.pword(
160 RSC_EXPORT detail::set_element_sequence_style<detail::element_sequence_style>
161 element_sequence(
const string& separator =
", ",
162 const string& first_separator =
"",
163 const string& last_separator =
"");
165 RSC_EXPORT
extern const detail::set_element_sequence_style<detail::element_sequence_style> element_sequence_singleline;
166 RSC_EXPORT
extern const detail::set_element_sequence_style<detail::element_sequence_style> element_sequence_multiline;
170 template<
typename Ch,
typename Tr,
typename T>
171 basic_ostream<Ch, Tr>&
172 operator<<(basic_ostream<Ch, Tr>& stream,
173 const detail::set_container_style<T>& style) {
176 delete reinterpret_cast<detail::container_style*> (stream.pword(
188 RSC_EXPORT
extern const detail::set_container_style<detail::container_style> container_none;
189 RSC_EXPORT
extern const detail::set_container_style<detail::container_style> container_parentheses;
190 RSC_EXPORT
extern const detail::set_container_style<detail::container_style> container_hash;
191 RSC_EXPORT
extern const detail::set_container_style<detail::container_style> container_d;
192 RSC_EXPORT
extern const detail::set_container_style<detail::container_style> container_brackets;
193 RSC_EXPORT
extern const detail::set_container_style<detail::container_style> container_braces;
197 template<
typename Ch,
typename Tr,
typename R,
typename S>
198 basic_ostream<Ch, Tr>&
199 operator<<(basic_ostream<Ch, Tr>& stream,
const pair<R, S>& pair) {
203 stream << pair_default;
205 detail::pair_style& style =
206 *
reinterpret_cast<detail::pair_style*
> (stream.pword(
209 stream << style.open_brace << pair.first << style.separator << pair.second
210 << style.close_brace;
216 template<
typename Ch,
typename Tr,
typename T>
217 basic_ostream<Ch, Tr>&
218 operator<<(basic_ostream<Ch, Tr>& stream,
const vector<T>& container) {
219 typedef vector<T> container_type;
220 typedef typename container_type::value_type value_type;
223 stream << element_sequence_singleline;
226 detail::element_sequence_style& element_sequence_style =
227 *
reinterpret_cast<detail::element_sequence_style*
>(stream.pword(
229 detail::container_style container_style
231 ? *
reinterpret_cast<detail::container_style*
>
233 : container_hash.value);
235 stream << container_style.open;
236 if (container.size() >= 1) {
237 stream << element_sequence_style.first_separator;
238 copy(container.begin(), container.end() - 1,
239 ostream_iterator<value_type>(stream,
240 element_sequence_style.separator.c_str()));
241 stream << container.back();
242 stream << element_sequence_style.last_separator;
244 stream << container_style.close;
248 template<
typename Ch,
typename Tr,
typename T>
249 basic_ostream<Ch, Tr>&
250 operator<<(basic_ostream<Ch, Tr>& stream,
const deque<T>& container) {
251 typedef vector<T> container_type;
252 typedef typename container_type::value_type value_type;
255 stream << element_sequence_singleline;
258 detail::element_sequence_style& element_sequence_style =
259 *
reinterpret_cast<detail::element_sequence_style*
>(stream.pword(
261 detail::container_style container_style
263 ? *
reinterpret_cast<detail::container_style*
>
265 : container_d.value);
267 stream << container_style.open;
268 if (container.size() >= 1) {
269 stream << element_sequence_style.first_separator;
270 copy(container.begin(), container.end() - 1,
271 ostream_iterator<value_type>(stream,
272 element_sequence_style.separator.c_str()));
273 stream << container.back();
274 stream << element_sequence_style.last_separator;
276 stream << container_style.close;
280 template<
typename Ch,
typename Tr,
typename T>
281 basic_ostream<Ch, Tr>&
282 operator<<(basic_ostream<Ch, Tr>& stream,
const list<T>& container) {
283 typedef list<T> container_type;
284 typedef typename container_type::value_type value_type;
287 stream << element_sequence_singleline;
290 detail::element_sequence_style& element_sequence_style =
291 *
reinterpret_cast<detail::element_sequence_style*
>(stream.pword(
293 detail::container_style container_style
295 ? *
reinterpret_cast<detail::container_style*
>
297 : container_brackets.value);
299 stream << container_style.open;
300 if (container.size() >= 1) {
301 stream << element_sequence_style.first_separator;
302 copy(container.begin(), --container.end(),
303 ostream_iterator<value_type>(stream,
304 element_sequence_style.separator.c_str()));
305 stream << container.back();
306 stream << element_sequence_style.last_separator;
308 stream << container_style.close;
312 template<
typename Ch,
typename Tr,
typename T>
313 basic_ostream<Ch, Tr>&
314 operator<<(basic_ostream<Ch, Tr>& stream,
const set<T>& container) {
315 typedef set<T> container_type;
316 typedef typename container_type::value_type value_type;
319 stream << element_sequence_singleline;
322 detail::element_sequence_style& element_sequence_style =
323 *
reinterpret_cast<detail::element_sequence_style*
>(stream.pword(
325 detail::container_style container_style
327 ? *
reinterpret_cast<detail::container_style*
>(
329 : container_braces.value);
331 stream << container_style.open;
332 if (container.size() >= 1) {
333 stream << element_sequence_style.first_separator;
334 copy(++container.begin(), container.end(),
335 ostream_iterator<value_type>(stream,
336 element_sequence_style.separator.c_str()));
337 stream << *container.begin();
338 stream << element_sequence_style.last_separator;
340 stream << container_style.close;
344 template<
typename Ch,
typename Tr,
typename R,
typename S>
345 basic_ostream<Ch, Tr>&
346 operator<<(basic_ostream<Ch, Tr>& stream,
const map<R, S>& container) {
347 typedef map<R, S> container_type;
350 stream << element_sequence_singleline;
353 detail::element_sequence_style& element_sequence_style =
354 *
reinterpret_cast<detail::element_sequence_style*
>(stream.pword(
356 detail::container_style container_style
358 ? *
reinterpret_cast<detail::container_style*
>
360 : container_braces.value);
362 stream << container_style.open;
363 stream << element_sequence_style.first_separator;
364 for (
typename container_type::const_iterator it = container.begin(); it
365 != container.end();) {
367 if (++it != container.end())
368 stream << element_sequence_style.separator;
370 stream << element_sequence_style.last_separator;
371 stream << container_style.close;
375 template<
typename Ch,
typename Tr,
typename R,
typename S>
376 basic_ostream<Ch, Tr>&
377 operator<<(basic_ostream<Ch, Tr>& stream,
const multimap<R, S>& container) {
378 typedef multimap<R, S> container_type;
381 stream << element_sequence_singleline;
384 detail::element_sequence_style& element_sequence_style =
385 *
reinterpret_cast<detail::element_sequence_style*
>(stream.pword(
387 detail::container_style container_style
389 ? *
reinterpret_cast<detail::container_style*
>
391 : container_braces.value);
393 stream << container_style.open;
394 stream << element_sequence_style.first_separator;
395 for (
typename container_type::const_iterator it = container.begin(); it
396 != container.end();) {
398 if (++it != container.end())
399 stream << element_sequence_style.separator;
401 stream << element_sequence_style.last_separator;
402 stream << container_style.close;
406 template<
typename Ch,
typename Tr,
typename T>
407 basic_ostream<Ch, Tr>&
408 operator<<(basic_ostream<Ch, Tr>& stream,
const valarray<T>& container) {
410 stream << element_sequence_singleline;
413 detail::element_sequence_style& element_sequence_style =
414 *
reinterpret_cast<detail::element_sequence_style*
>(stream.pword(
416 detail::container_style container_style
418 ? *
reinterpret_cast<detail::container_style*
>
420 : container_parentheses.value);
422 stream << container_style.open;
423 stream << element_sequence_style.first_separator;
424 for (
unsigned int i = 0; i != container.size(); ++i) {
425 stream << container[i];
426 if (i != container.size() - 1)
427 stream << element_sequence_style.separator;
429 stream << element_sequence_style.last_separator;
430 stream << container_style.close;
void container_style_delete(ios_base::event event_, ios_base &stream, int)
void pair_style_delete(ios_base::event event_, ios_base &stream, int)
static const int stream_storage
set_element_sequence_style(const T &value)
static const int stream_storage
static const int stream_storage
void element_sequence_style_delete(ios_base::event event_, ios_base &stream, int)