You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
9 years ago
|
//
|
||
|
// Created by mwo on 24/05/15.
|
||
|
//
|
||
|
// source: http://codereview.stackexchange.com/questions/13176/infix-iterator-code
|
||
|
|
||
|
// infix_iterator.h
|
||
|
#if !defined(INFIX_ITERATOR_H_)
|
||
|
#define INFIX_ITERATOR_H_
|
||
|
#include <ostream>
|
||
|
#include <iterator>
|
||
|
#include <string>
|
||
|
|
||
|
template <class T, class charT=char, class traits=std::char_traits<charT> >
|
||
|
class infix_ostream_iterator :
|
||
|
public std::iterator<std::output_iterator_tag, void, void, void, void>
|
||
|
{
|
||
|
std::basic_ostream<charT,traits> *os;
|
||
|
std::basic_string<charT> delimiter;
|
||
|
std::basic_string<charT> real_delim;
|
||
|
|
||
|
public:
|
||
|
|
||
|
typedef charT char_type;
|
||
|
typedef traits traits_type;
|
||
|
typedef std::basic_ostream<charT, traits> ostream_type;
|
||
|
|
||
|
infix_ostream_iterator(ostream_type &s)
|
||
|
: os(&s)
|
||
|
{}
|
||
|
|
||
|
infix_ostream_iterator(ostream_type &s, charT const *d)
|
||
|
: os(&s),
|
||
|
real_delim(d)
|
||
|
{}
|
||
|
|
||
|
infix_ostream_iterator<T, charT, traits> &operator=(T const &item)
|
||
|
{
|
||
|
*os << delimiter << item;
|
||
|
delimiter = real_delim;
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
infix_ostream_iterator<T, charT, traits> &operator*() {
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
infix_ostream_iterator<T, charT, traits> &operator++() {
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
infix_ostream_iterator<T, charT, traits> &operator++(int) {
|
||
|
return *this;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
|