/** ** \file misc/separator.hxx ** \brief Output containers with a separator between items. */ #pragma once #include #include #include namespace misc { template inline separator::separator(const C& c, const S& s) : container_(c) , separator_(s) {} template inline std::ostream& separator::operator()(std::ostream& o) const { for (auto i = container_.begin(); i != container_.end(); ++i) { if (i != container_.begin()) o << separator_; o << deref << *i; } return o; } template separator separate(const C& c, const S& s) { return separator(c, s); } template separator separate(const C& c) { return separate(c, '\n'); } template inline std::ostream& operator<<(std::ostream& o, const separator& s) { return s(o); } template inline std::ostream& operator<<(std::ostream& o, const std::pair& p) { return o << p.first << p.second; } } // namespace misc