00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef INC_MI32_GENRCRWTXT_H
00039 #define INC_MI32_GENRCRWTXT_H
00040
00041 #ifndef INC_MI32_GENERICRW_H
00042 #include <mi32/genericrw.h>
00043 #endif
00044
00045 #ifndef INC_MI32_CHARENCODING_H
00046 #include <mi32/charencoding.h>
00047 #endif
00048
00049 #ifndef INC_MI32_FILEACCESS_H
00050 #include <mi32/fileaccess.h>
00051 #endif
00052
00053 #ifdef MISYSTEMDLL
00054 #define CLASSLIBEXPORT MI_DLLCLASSEXPORT
00055 #else
00056 #define CLASSLIBEXPORT MI_DLLCLASSIMPORT
00057 #endif
00058
00059 #ifndef GENERATING_DOXYGEN_OUTPUT
00060 class FILEPATH;
00061 class MISTRING;
00062 class STRUTF8;
00063 #endif
00064
00071 class CLASSLIBEXPORT GENERICRW_TEXT {
00072 public:
00073
00074 enum LINETERMINATOR {
00075 LINETERMINATOR_CR = 0,
00076 LINETERMINATOR_LF,
00077 LINETERMINATOR_CRLF,
00078 LINETERMINATOR_LFCR,
00079 LINETERMINATOR_Default
00080 };
00081
00082 enum CAPABILITIES {
00083 CAPABILITY_None = 0x000,
00084 CAPABILITY_Read = 0x001,
00085 CAPABILITY_Write = 0x002,
00086 CAPABILITY_Size = 0x004,
00087 CAPABILITIES_All = 0x00F,
00088 };
00089
00090 #ifndef GENERATING_DOXYGEN_OUTPUT
00091 class PRIV;
00092 #endif
00093
00094 class POSN {
00095 public:
00096 POSN (
00097 ) : m_posn(0) { }
00098
00099 POSN (
00100 const POSN& rhs
00101 ) : m_posn(rhs.m_posn) { }
00102
00103 POSN& operator= (
00104 const POSN& rhs
00105 ) {
00106 if (&rhs != this) {
00107 m_posn = rhs.m_posn;
00108 }
00109 return (*this);
00110 }
00111
00112 INT64 GetApproxPosn (
00113 ) const { return (m_posn); }
00114
00115 INT64 GetStorable (
00116 ) const { return (m_posn); }
00117
00118 void SetFromStorable (
00119 INT64 posn
00120 ) { m_posn = posn; }
00121
00122 private:
00123 INT64 m_posn;
00124
00125 explicit POSN (
00126 INT64 posn
00127 ) : m_posn(posn) { }
00128
00129
00130 operator INT64 (
00131 ) const { return (m_posn); }
00132
00133 friend class PRIV;
00134 };
00135
00137 GENERICRW_TEXT& operator<< (
00138 int value
00139 );
00140
00142 GENERICRW_TEXT& operator<< (
00143 unsigned value
00144 );
00145
00147 GENERICRW_TEXT& operator<< (
00148 double value
00149 );
00150
00152 GENERICRW_TEXT& operator<< (
00153 const char* str
00154 );
00155
00157 GENERICRW_TEXT& operator<< (
00158 const MISTRING& str
00159 );
00160
00162 GENERICRW_TEXT& operator<< (
00163 const STRUTF8& str
00164 );
00165
00166
00167 CHAR_ENCODING GetEncoding (
00168 ) const;
00169
00172 INT64 GetSize (
00173 ) const;
00174
00177 ERRVALUE ReadAll (
00178 MISTRING& string
00179 );
00180
00183 INT32 ReadLine (
00184 MISTRING& string,
00185 bool stripnewline = true
00186 );
00187
00191 INT32 ReadLine (
00192 MISTRING& string,
00193 bool stripnewline,
00194 INT32 maxlength
00195 );
00196
00199 ERRVALUE ReadLine (
00200 STRUTF8& string,
00201 bool stripnewline = true
00202 );
00203
00204 ERRVALUE ReadLine (
00205 STRUTF8& string,
00206 bool stripnewline,
00207 INT32 maxlength
00208 );
00209
00211 ERRVALUE Rewind (
00212 );
00213
00216 POSN Seek (
00217 const POSN& posn
00218 );
00219
00221 ERRVALUE SeekToEnd (
00222 );
00223
00225 void SetEncoding(
00226 CHAR_ENCODING encoding
00227 );
00228
00230 void SetLineTerminator(
00231 LINETERMINATOR terminator
00232 );
00233
00236 POSN Tell (
00237 ) const;
00238
00241 ERRVALUE Write (
00242 const MISTRING& string,
00243 bool appendnewline = false
00244 );
00245
00248 ERRVALUE Write (
00249 const STRUTF8& string,
00250 bool appendnewline = false
00251 );
00252
00255 ERRVALUE Write (
00256 const char* string,
00257 bool appendnewline = false
00258 );
00259
00260 protected:
00262 GENERICRW_TEXT (
00263 );
00264
00265 virtual ~GENERICRW_TEXT (
00266 );
00267
00270 LINETERMINATOR DetectLineTerminator ();
00271
00272 private:
00273
00274 #ifndef GENERATING_DOXYGEN_OUTPUT
00275 GENERICRW_TEXT::PRIV *m_Priv;
00276 friend class GENERICRW_TEXT::PRIV;
00277 #endif
00278
00280 virtual INT64 v_GetSize() const=0;
00281
00283 virtual INT64 v_Read(void *buf, INT32 numbytes, bool AllowPartial)=0;
00284
00286 virtual ERRVALUE v_Write(const void *buffer, INT32 numbytes)=0;
00287
00289 virtual INT64 v_Seek(
00290 INT64 offset,
00291 GENERICRW::SEEKFROM from = GENERICRW::SEEKFROM_Beginning
00292 )=0;
00293
00295 virtual INT64 v_Tell() const=0;
00296
00298 virtual CAPABILITIES v_GetCapabilities()=0;
00299 };
00300 #ifndef GENERATING_DOXYGEN_OUTPUT
00301 DEFINE_ENUM_OP_BITWISE(GENERICRW_TEXT::CAPABILITIES)
00302 #endif
00303
00304 #endif // INC_MI32_GENERICRW_TEXT_H