Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00028
00029 #ifndef GENICAM_GCSTRING_H
00030 #define GENICAM_GCSTRING_H
00031
00032 #include <new>
00033 #include <string>
00034 #include <iostream>
00035 #include <Base/GCTypes.h>
00036
00037 #pragma pack(push, 8)
00038
00039
00044 #define GCSTRING_NPOS size_t(-1)
00045
00046 namespace GENICAM_NAMESPACE
00047 {
00052 class GCBASE_API gcstring
00053 {
00054 # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
00055 public:
00057 class GCBASE_API gcwchar
00058 {
00059 public:
00061 explicit gcwchar( size_t n );
00062
00063
00064 gcwchar( const gcwchar &rhs );
00065
00066
00067 gcwchar & operator = (const gcwchar &rhs);
00068
00070 const wchar_t * c_str() const;
00071
00073 size_t length() const;
00074
00076 ~gcwchar();
00077 private:
00078 class impl;
00079 impl *m_pimpl;
00080 };
00081
00082 # endif
00083
00084
00085
00086 public:
00087 gcstring ();
00088 gcstring ( const char *pc );
00089 gcstring ( const char *pc, size_t n );
00090 gcstring ( size_t count, char ch );
00091 gcstring ( const gcstring &str );
00092 # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
00093 explicit gcstring ( const wchar_t *pBufferUTF16 );
00094 gcstring ( const wchar_t *pBufferUTF16, size_t n );
00095 # endif
00096 virtual ~gcstring ( void );
00097
00098
00099
00100 public:
00101 virtual gcstring & append ( const gcstring &str );
00102 virtual gcstring & append ( size_t count, char ch );
00103 virtual gcstring & assign ( const gcstring &str );
00104 virtual gcstring & assign ( size_t count, char ch );
00105 virtual gcstring & assign ( const char *pc );
00106 virtual gcstring & assign ( const char *pc, size_t n );
00107 # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
00108 virtual gcstring & assign ( const wchar_t *pStringUTF16 );
00109 virtual gcstring & assign ( const wchar_t *pStringUTF16, int n );
00110 # endif
00111 virtual int compare ( const gcstring &str ) const;
00112 # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
00113 virtual gcwchar w_str ( void ) const;
00114 # endif
00115 virtual const char *c_str ( void ) const;
00116 virtual bool empty ( void ) const;
00117 virtual size_t find ( char ch, size_t offset = 0 ) const;
00118 virtual size_t find ( const gcstring &str, size_t offset = 0 ) const;
00119 virtual size_t find ( const gcstring &str, size_t offset, size_t count ) const;
00120 virtual size_t find ( const char* pc, size_t offset = 0) const;
00121 virtual size_t find ( const char* pc, size_t offset, size_t count ) const;
00122 virtual size_t length ( void ) const;
00123 virtual size_t size ( void ) const;
00124 virtual void resize ( size_t n );
00125 virtual size_t max_size ( ) const;
00126 virtual gcstring substr ( size_t offset = 0, size_t count = GCSTRING_NPOS ) const;
00127 virtual size_t find_first_of ( const gcstring &str, size_t offset = 0 ) const;
00128 virtual size_t find_first_not_of ( const gcstring &str, size_t offset = 0 ) const;
00129 static size_t _npos ( void );
00130 virtual void swap ( gcstring &Right );
00131
00132
00133
00134
00135 public:
00136 bool operator != ( const gcstring &str ) const;
00137 bool operator != ( const char *pc ) const;
00138 gcstring & operator += ( const gcstring &str );
00139 gcstring operator += ( const gcstring &str ) const;
00140 gcstring & operator += ( const char *pc );
00141
00142 gcstring & operator += ( char ch );
00143 gcstring operator += ( char ch ) const;
00144 gcstring & operator = ( const gcstring &str );
00145 # if defined(_MSC_VER) && !defined(PHARLAP_WIN32)
00146 gcstring & operator = ( const wchar_t *pStringUTF16 );
00147 # endif
00148 bool operator == ( const gcstring &str ) const;
00149 bool operator == ( const char *pc ) const;
00150 bool operator < ( const gcstring &str ) const;
00151 bool operator > ( const gcstring &str ) const;
00152 operator const char * ( void ) const;
00153 void operator delete ( void *pWhere );
00154 void operator delete ( void *pWhere, void *pNewWhere );
00155 void * operator new ( size_t uiSize );
00156 void * operator new ( size_t uiSize, void *pWhere );
00157 GCBASE_API
00158 friend gcstring operator + ( const gcstring &left, const gcstring &right );
00159 GCBASE_API
00160 friend gcstring operator + ( const gcstring &left, const char *right );
00161 GCBASE_API
00162 friend gcstring operator + ( const char *left, const gcstring &right );
00163
00164
00165
00166 private:
00167
00168 const char* m_psz;
00169
00170 uint8_t m_opaqueData[64];
00171
00172
00173
00174 public:
00175
00176
00177 static const size_t npos;
00178 };
00179 }
00180
00181 namespace GENICAM_NAMESPACE
00182 {
00183
00184 GCBASE_API void ThrowBadAlloc(const char *source, int line);
00185
00188 inline std::istream & getline(std::istream& is, GENICAM_NAMESPACE::gcstring& str)
00189 {
00190 try
00191 {
00192 std::string tmp;
00193 std::getline(is, tmp);
00194 str.assign(tmp.c_str(), tmp.size());
00195 }
00196 catch(std::bad_alloc &)
00197 {
00198 ThrowBadAlloc(__FILE__, __LINE__);
00199 }
00200 return is;
00201 }
00202
00205 inline std::istream & getline(std::istream& is, GENICAM_NAMESPACE::gcstring& str, char delim)
00206 {
00207 try
00208 {
00209 std::string tmp;
00210 std::getline(is, tmp, delim);
00211 str.assign(tmp.c_str(), tmp.size());
00212 }
00213 catch(std::bad_alloc &)
00214 {
00215 ThrowBadAlloc(__FILE__, __LINE__);
00216 }
00217 return is;
00218 }
00219 }
00220
00221
00222
00225 inline std::ostream & operator <<(std::ostream &ostr, const GENICAM_NAMESPACE::gcstring &str)
00226 {
00227 try
00228 {
00229
00230 ostr << str.c_str();
00231 }
00232 catch(std::bad_alloc &)
00233 {
00234 GENICAM_NAMESPACE::ThrowBadAlloc(__FILE__, __LINE__);
00235 }
00236 return ostr;
00237 }
00238
00241 inline std::istream & operator >>(std::istream &istr, GENICAM_NAMESPACE::gcstring &str)
00242 {
00243 try
00244 {
00245 std::string tmp;
00246 istr >> tmp;
00247 str.assign(tmp.c_str(), tmp.size());
00248 }
00249 catch(std::bad_alloc &)
00250 {
00251 GENICAM_NAMESPACE::ThrowBadAlloc(__FILE__, __LINE__);
00252 }
00253 return istr;
00254 }
00255
00256 #pragma pack(pop)
00257
00258 #endif // GENICAM_GCSTRING_H