00001 00008 /***************************************************************************** 00009 ** Ifdefs 00010 *****************************************************************************/ 00011 00012 #ifndef ECL_STREAMS_BASE_TEXT_STREAM_HPP_ 00013 #define ECL_STREAMS_BASE_TEXT_STREAM_HPP_ 00014 00015 /***************************************************************************** 00016 ** Includes 00017 *****************************************************************************/ 00018 00019 #include <ecl/config/macros.hpp> 00020 #include <ecl/errors/handlers.hpp> 00021 00022 /***************************************************************************** 00023 ** Namespaces 00024 *****************************************************************************/ 00025 00026 namespace ecl { 00027 namespace interfaces { 00028 00029 /***************************************************************************** 00030 ** Interface [BaseTextStream] 00031 *****************************************************************************/ 00041 template <typename Device> 00042 class ECL_PUBLIC BaseTextStream { 00043 public: 00044 BaseTextStream() : error(ecl::NoError) {}; 00045 virtual ~BaseTextStream() {} 00046 Device& device(); 00047 bool fail() const; 00048 const ecl::Error& errorStatus() const; 00049 00050 protected: 00051 ecl::Error error; 00052 Device io_device; 00053 }; 00054 00055 /***************************************************************************** 00056 ** Implementation [BaseTextStream] 00057 *****************************************************************************/ 00064 template <typename Device> 00065 Device& BaseTextStream<Device>::device() { return io_device; } 00066 00076 template <typename Device> 00077 bool BaseTextStream<Device>::fail() const { 00078 if ( error.flag() != ecl::NoError ) { 00079 return true; 00080 } else { 00081 return false; 00082 } 00083 } 00092 template <typename Device> 00093 const ecl::Error& BaseTextStream<Device>::errorStatus() const { 00094 return error; 00095 } 00096 00097 } // namespace interfaces 00098 } // namespace ecl 00099 00100 #endif /* ECL_STREAMS_BASE_TEXT_STREAM_HPP_ */