00001 00008 /***************************************************************************** 00009 ** Ifdefs 00010 *****************************************************************************/ 00011 00012 #ifndef ECL_DEVICES_STRING_HPP_ 00013 #define ECL_DEVICES_STRING_HPP_ 00014 00015 /***************************************************************************** 00016 ** Includes 00017 *****************************************************************************/ 00018 00019 #include <string> 00020 #include "traits.hpp" 00021 00022 /***************************************************************************** 00023 ** Namespaces 00024 *****************************************************************************/ 00025 00026 namespace ecl { 00027 00028 /***************************************************************************** 00029 ** Interface [String] 00030 *****************************************************************************/ 00048 class String { 00049 public: 00058 explicit String(const char* str = ""); 00064 virtual ~String(); 00065 00066 /********************* 00067 ** String Interface 00068 **********************/ 00077 const char* c_str(); 00086 std::string str(); 00093 void clear(); 00094 00095 /****************************************** 00096 ** Device Source Interface 00097 *******************************************/ 00106 long read(char &c); 00115 long read(char* s, unsigned long n); 00124 unsigned long remaining(); 00125 00126 /****************************************** 00127 ** Device Sink Interface 00128 *******************************************/ 00138 long write(char c); 00150 long write(const char* s, unsigned long n); 00151 00152 /****************************************** 00153 ** Device Seekable Interface 00154 *******************************************/ 00164 unsigned long size(); 00171 void flush() {}; 00172 00173 /********************* 00174 ** Device Interface 00175 **********************/ 00184 bool open() { return true; }; 00193 bool isOpen() { return true; }; 00195 private: 00196 unsigned long buffer_length; // Actual reserved memory is this +1 00197 char *buffer; 00198 char* buffer_cur_write; 00199 char* buffer_cur_read; 00209 void grow(int no_bytes = 256); 00210 00211 }; 00212 00213 /***************************************************************************** 00214 ** Traits 00215 *****************************************************************************/ 00216 00222 template <> 00223 class is_sink<String> : public True {}; 00224 00230 template <> 00231 class is_source<String> : public True {}; 00232 00238 template <> 00239 class is_sourcesink<String> : public True {}; 00240 00241 } // namespace ecl 00242 00243 00244 #endif /* ECL_DEVICES_STRING_HPP_ */