mirror of
https://github.com/bolero-MURAKAMI/Sprout
synced 2025-08-03 12:49:50 +00:00
add sprout::optional
This commit is contained in:
parent
9b9956f810
commit
8cb432dee1
15 changed files with 574 additions and 81 deletions
53
sprout/optional/io.hpp
Normal file
53
sprout/optional/io.hpp
Normal file
|
@ -0,0 +1,53 @@
|
|||
#ifndef SPROUT_OPTIONAL_IO_HPP
|
||||
#define SPROUT_OPTIONAL_IO_HPP
|
||||
|
||||
#include <iosfwd>
|
||||
#include <ios>
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/optional/optional.hpp>
|
||||
#include <sprout/none.hpp>
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
// operator>>
|
||||
//
|
||||
template<typename Elem, typename Traits, typename T>
|
||||
inline std::basic_istream<Elem, Traits>&
|
||||
operator<<(std::basic_istream<Elem, Traits>& lhs, sprout::optional<T>& 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<typename Elem, typename Traits, typename T>
|
||||
inline std::basic_ostream<Elem, Traits>&
|
||||
operator<<(std::basic_ostream<Elem, Traits>& lhs, sprout::optional<T> const& rhs) {
|
||||
if (lhs.good()) {
|
||||
if (!rhs) {
|
||||
lhs << "--";
|
||||
} else {
|
||||
lhs << ' ' << *rhs;
|
||||
}
|
||||
}
|
||||
return lhs;
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
#endif // #ifndef SPROUT_OPTIONAL_IO_HPP
|
Loading…
Add table
Add a link
Reference in a new issue