50 namespace ArgumentIO {
56 std::ostream & operator << (std::ostream & os,
const std::vector<T> & t)
59 for (
const auto & e : t) {
69 template <
class... Ts>
70 std::ostream & operator << (std::ostream & os,
const std::tuple<Ts...> & t)
72 namespace Tuples = Dwm::TupleHelpers;
75 [&os, &sep] (
auto && e)
76 { os << sep << e; sep =
","; });
84 std::ostream &
operator << (std::ostream & os,
const std::set<T> & s)
87 for (
const auto & e : s) {
97 template <
class T1,
class T2>
98 std::ostream &
operator << (std::ostream & os,
const std::pair<T1,T2> & t)
100 os << t.first <<
',' << t.second;
107 template <
class T,
size_t N>
108 std::ostream &
operator << (std::ostream & os,
const std::array<T,N> & t)
111 for (
const auto & e : t) {
122 std::istream & operator >> (std::istream & is, std::vector<T> & v)
127 if (std::getline(is, s,
',')) {
128 std::istringstream iss(s);
134 if (is.rdstate() & std::ios_base::eofbit) {
143 template <
class... Ts>
144 std::istream & operator >> (std::istream & is, std::tuple<Ts...> & t)
146 namespace Tuples = Dwm::TupleHelpers;
149 std::istringstream iss;
154 std::getline(is, s,
',');
155 if constexpr (std::is_same<std::remove_reference_t<
decltype(e)>, std::string>::value) {
159 std::istringstream iss(s);
163 if (is.rdstate() & std::ios_base::eofbit) {
172 std::istream & operator >> (std::istream & is, std::string & s)
182 std::istream & operator >> (std::istream & is, std::set<T> & t)
187 if (std::getline(is, s,
',')) {
188 std::istringstream iss(s);
191 if (! t.insert(e).second) {
192 is.setstate(std::ios_base::failbit);
197 if (is.rdstate() & std::ios_base::eofbit) {
206 template <
class T1,
class T2>
207 std::istream & operator >> (std::istream & is, std::pair<T1,T2> & t)
210 if (getline(is, s,
',')) {
211 if constexpr (std::is_same<T1,std::string>::value) {
215 std::istringstream iss(s);
219 if constexpr (std::is_same<T2,std::string>::value) {
223 std::istringstream iss(s);
233 template <
class T,
size_t N>
234 std::istream & operator >> (std::istream & is, std::array<T,N> & a)
236 for (
auto i = 0; i < N; ++i) {
239 if (std::getline(is, s,
',')) {
240 std::istringstream iss(s);
250 if (is.rdstate() & std::ios_base::eofbit) {
std::ostream & operator<<(std::ostream &os, const Dwm::ProcessInfo &pi)
ostream output operator