#ifndef SPROUT_OPTIONAL_IO_HPP #define SPROUT_OPTIONAL_IO_HPP #include #include #include #include #include namespace sprout { // // operator>> // template inline std::basic_istream& operator<<(std::basic_istream& lhs, sprout::optional& rhs) { if (lhs.good()) { int d = lhs.get(); if (d == ' ') { T x; lhs >> x; rhs = x; } else { if (d == '-') { d = lhs.get(); if (d == '-') { rhs = sprout::none; return lhs; } } lhs.setstate(std::ios::failbit); } } return lhs; } // // operator<< // template inline std::basic_ostream& operator<<(std::basic_ostream& lhs, sprout::optional const& rhs) { if (lhs.good()) { if (!rhs) { lhs << "--"; } else { lhs << ' ' << *rhs; } } return lhs; } } // namespace sprout #endif // #ifndef SPROUT_OPTIONAL_IO_HPP