// // Created by robin on 8/9/15. // #include "Result.h" #include #include template Result::Result() { } template const Result Result::ok(const T& data) { Result r; r._success = true; r._data = data; return r; } template const Result Result::strerror() { Result r; r._success = false; r._error = ::strerror(errno); return r; } template const Result Result::error(const std::string& error) { Result r; r._success = false; r._error = error; return r; } template template const Result Result::error(const Result& other) { Result r; r._success = false; r.error(other.getError()); return r; } template T &Result::getData() { return _data; } template const bool Result::isSuccess() const { return _success; } template bool Result::operator!() const { return !isSuccess(); } template Result::operator bool() const { return isSuccess(); } template const std::string &Result::getError() const { return _error; } template std::ostream& operator<<(std::ostream& os, const Result& res) { if (res._success) { os << "Success";// << res._data; } else { os << "Error: " << (res._error.empty() ? "Unknown error" : res._error); } return os; } template const Result& Result::print() const { (_success ? std::cout : std::cerr) << *this << std::endl; return *this; }