iterator: add infix_iterator
This commit is contained in:
parent
92be31d870
commit
cd15371fcf
41
iterator.hpp
41
iterator.hpp
@ -67,4 +67,45 @@ class referencing_iterator {
|
||||
|
||||
};
|
||||
|
||||
|
||||
namespace util {
|
||||
template <
|
||||
typename T,
|
||||
class CharT = char,
|
||||
class Traits = std::char_traits<CharT>
|
||||
>
|
||||
class infix_iterator : public std::iterator<std::output_iterator_tag, void, void, void, void> {
|
||||
public:
|
||||
using char_type = CharT;
|
||||
using traits_type = Traits;
|
||||
using ostream_type = std::basic_ostream<char_type, traits_type>;
|
||||
|
||||
infix_iterator (ostream_type& _output, const CharT *_delimiter):
|
||||
m_output (_output),
|
||||
m_delimiter (_delimiter)
|
||||
{ ; }
|
||||
|
||||
infix_iterator&
|
||||
operator= (const T &value)
|
||||
{
|
||||
if (!m_first)
|
||||
m_output << m_delimiter;
|
||||
|
||||
m_output << value;
|
||||
m_first = false;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
infix_iterator& operator* (void) { return *this; }
|
||||
infix_iterator& operator++ (void) { return *this; }
|
||||
infix_iterator& operator++ (int) { return *this; }
|
||||
|
||||
private:
|
||||
bool m_first = true;
|
||||
ostream_type &m_output;
|
||||
const CharT *m_delimiter;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user