31 #ifndef _CPL_STRING_H_INCLUDED
32 #define _CPL_STRING_H_INCLUDED
62 char CPL_DLL **CSLAddString(
char **papszStrList,
const char *pszNewString) CPL_WARN_UNUSED_RESULT;
63 int CPL_DLL CSLCount(
char **papszStrList);
64 const char CPL_DLL *CSLGetField(
char **,
int );
65 void CPL_DLL CPL_STDCALL CSLDestroy(
char **papszStrList);
66 char CPL_DLL **CSLDuplicate(
char **papszStrList) CPL_WARN_UNUSED_RESULT;
67 char CPL_DLL **CSLMerge(
char **papszOrig,
char **papszOverride ) CPL_WARN_UNUSED_RESULT;
69 char CPL_DLL **CSLTokenizeString(
const char *pszString ) CPL_WARN_UNUSED_RESULT;
70 char CPL_DLL **CSLTokenizeStringComplex(
const char *pszString,
71 const char *pszDelimiter,
72 int bHonourStrings,
int bAllowEmptyTokens ) CPL_WARN_UNUSED_RESULT;
73 char CPL_DLL **CSLTokenizeString2(
const char *pszString,
74 const char *pszDelimeter,
75 int nCSLTFlags ) CPL_WARN_UNUSED_RESULT;
77 #define CSLT_HONOURSTRINGS 0x0001
78 #define CSLT_ALLOWEMPTYTOKENS 0x0002
79 #define CSLT_PRESERVEQUOTES 0x0004
80 #define CSLT_PRESERVEESCAPES 0x0008
81 #define CSLT_STRIPLEADSPACES 0x0010
82 #define CSLT_STRIPENDSPACES 0x0020
84 int CPL_DLL CSLPrint(
char **papszStrList, FILE *fpOut);
85 char CPL_DLL **CSLLoad(
const char *pszFname) CPL_WARN_UNUSED_RESULT;
86 char CPL_DLL **CSLLoad2(
const char *pszFname,
int nMaxLines,
int nMaxCols,
char** papszOptions) CPL_WARN_UNUSED_RESULT;
87 int CPL_DLL CSLSave(
char **papszStrList,
const char *pszFname);
89 char CPL_DLL **CSLInsertStrings(
char **papszStrList,
int nInsertAtLineNo,
90 char **papszNewLines) CPL_WARN_UNUSED_RESULT;
91 char CPL_DLL **CSLInsertString(
char **papszStrList,
int nInsertAtLineNo,
92 const char *pszNewLine) CPL_WARN_UNUSED_RESULT;
93 char CPL_DLL **CSLRemoveStrings(
char **papszStrList,
int nFirstLineToDelete,
94 int nNumToRemove,
char ***ppapszRetStrings) CPL_WARN_UNUSED_RESULT;
95 int CPL_DLL CSLFindString(
char **,
const char * );
96 int CPL_DLL CSLPartialFindString(
char **papszHaystack,
97 const char * pszNeedle );
98 int CPL_DLL CSLFindName(
char **papszStrList,
const char *pszName);
99 int CPL_DLL CSLTestBoolean(
const char *pszValue );
100 int CPL_DLL CSLFetchBoolean(
char **papszStrList,
const char *pszKey,
103 const char CPL_DLL *CPLSPrintf(
const char *fmt, ...) CPL_PRINT_FUNC_FORMAT(1, 2);
104 char CPL_DLL **CSLAppendPrintf(
char **papszStrList, const
char *fmt, ...) CPL_PRINT_FUNC_FORMAT(2, 3) CPL_WARN_UNUSED_RESULT;
105 int CPL_DLL CPLVASPrintf(
char **buf, const
char *fmt, va_list args );
108 CPLParseNameValue(const
char *pszNameValue,
char **ppszKey );
110 CSLFetchNameValue(
char **papszStrList, const
char *pszName);
112 CSLFetchNameValueDef(
char **papszStrList, const
char *pszName,
113 const
char *pszDefault );
115 CSLFetchNameValueMultiple(
char **papszStrList, const
char *pszName);
117 CSLAddNameValue(
char **papszStrList,
118 const
char *pszName, const
char *pszValue) CPL_WARN_UNUSED_RESULT;
120 CSLSetNameValue(
char **papszStrList,
121 const
char *pszName, const
char *pszValue) CPL_WARN_UNUSED_RESULT;
122 void CPL_DLL CSLSetNameValueSeparator(
char ** papszStrList,
123 const
char *pszSeparator );
125 #define CPLES_BackslashQuotable 0
130 #define CPLES_XML_BUT_QUOTES 5
132 char CPL_DLL *CPLEscapeString(
const char *pszString,
int nLength,
133 int nScheme ) CPL_WARN_UNUSED_RESULT;
134 char CPL_DLL *CPLUnescapeString(
const char *pszString,
int *pnLength,
135 int nScheme ) CPL_WARN_UNUSED_RESULT;
137 char CPL_DLL *CPLBinaryToHex(
int nBytes,
const GByte *pabyData ) CPL_WARN_UNUSED_RESULT;
138 GByte CPL_DLL *CPLHexToBinary(
const char *pszHex,
int *pnBytes ) CPL_WARN_UNUSED_RESULT;
140 char CPL_DLL *CPLBase64Encode(
int nBytes,
const GByte *pabyData ) CPL_WARN_UNUSED_RESULT;
141 int CPL_DLL CPLBase64DecodeInPlace(GByte* pszBase64);
150 CPLValueType CPL_DLL CPLGetValueType(
const char* pszValue);
152 size_t CPL_DLL CPLStrlcpy(
char* pszDest,
const char* pszSrc,
size_t nDestSize);
153 size_t CPL_DLL CPLStrlcat(
char* pszDest,
const char* pszSrc,
size_t nDestSize);
154 size_t CPL_DLL CPLStrnlen (
const char *pszStr,
size_t nMaxLen);
159 #define CPL_ENC_LOCALE ""
160 #define CPL_ENC_UTF8 "UTF-8"
161 #define CPL_ENC_UTF16 "UTF-16"
162 #define CPL_ENC_UCS2 "UCS-2"
163 #define CPL_ENC_UCS4 "UCS-4"
164 #define CPL_ENC_ASCII "ASCII"
165 #define CPL_ENC_ISO8859_1 "ISO-8859-1"
167 int CPL_DLL CPLEncodingCharSize(
const char *pszEncoding );
168 void CPL_DLL CPLClearRecodeWarningFlags();
169 char CPL_DLL *CPLRecode(
const char *pszSource,
170 const char *pszSrcEncoding,
171 const char *pszDstEncoding ) CPL_WARN_UNUSED_RESULT;
172 char CPL_DLL *CPLRecodeFromWChar(
const wchar_t *pwszSource,
173 const char *pszSrcEncoding,
174 const char *pszDstEncoding ) CPL_WARN_UNUSED_RESULT;
175 wchar_t CPL_DLL *CPLRecodeToWChar(
const char *pszSource,
176 const char *pszSrcEncoding,
177 const char *pszDstEncoding ) CPL_WARN_UNUSED_RESULT;
178 int CPL_DLL CPLIsUTF8(
const char* pabyData,
int nLen);
179 char CPL_DLL *CPLForceToASCII(
const char* pabyData,
int nLen,
char chReplacementChar) CPL_WARN_UNUSED_RESULT;
187 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
204 #if defined(_MSC_VER)
205 # if (_MSC_VER <= 1202)
206 # define MSVC_OLD_STUPID_BEHAVIOUR
211 #ifdef MSVC_OLD_STUPID_BEHAVIOUR
213 # define gdal_std_string string
215 # define gdal_std_string std::string
220 # pragma warning(disable:4251 4275 4786)
230 CPLString(
const std::string &oStr ) : gdal_std_string( oStr ) {}
231 CPLString(
const char *pszStr ) : gdal_std_string( pszStr ) {}
233 operator const char* (void)
const {
return c_str(); }
235 char& operator[](std::string::size_type i)
237 return gdal_std_string::operator[](i);
240 const char& operator[](std::string::size_type i)
const
242 return gdal_std_string::operator[](i);
245 char& operator[](
int i)
247 return gdal_std_string::operator[](static_cast<std::string::size_type>(i));
250 const char& operator[](
int i)
const
252 return gdal_std_string::operator[](static_cast<std::string::size_type>(i));
255 void Clear() { resize(0); }
258 void Seize(
char *pszValue)
260 if (pszValue == NULL )
270 CPLString &Printf(
const char *pszFormat, ... ) CPL_PRINT_FUNC_FORMAT (2, 3);
271 CPLString &vPrintf(
const char *pszFormat, va_list args );
272 CPLString &FormatC(
double dfValue,
const char *pszFormat = NULL );
274 CPLString &Recode(
const char *pszSrcEncoding,
const char *pszDstEncoding );
277 size_t ifind(
const std::string & str,
size_t pos = 0 )
const;
278 size_t ifind(
const char * s,
size_t pos = 0 )
const;
288 const char* pszValue);
299 mutable int nAllocation;
304 void MakeOurOwnCopy();
305 void EnsureAllocation(
int nMaxLength );
306 int FindSortedInsertionPoint(
const char *pszLine );
316 int size()
const {
return Count(); }
323 {
return InsertStringDirectly( nInsertAtLineNo, CPLStrdup(pszNewLine) ); }
324 CPLStringList &InsertStringDirectly(
int nInsertAtLineNo,
char *pszNewLine);
329 int FindString(
const char *pszTarget )
const
330 {
return CSLFindString( papszList, pszTarget ); }
331 int PartialFindString(
const char *pszNeedle )
const
332 {
return CSLPartialFindString( papszList, pszNeedle ); }
334 int FindName(
const char *pszName )
const;
335 int FetchBoolean(
const char *pszKey,
int bDefault )
const;
336 const char *FetchNameValue(
const char *pszKey )
const;
337 const char *FetchNameValueDef(
const char *pszKey,
const char *pszDefault )
const;
338 CPLStringList &AddNameValue(
const char *pszKey,
const char *pszValue );
339 CPLStringList &SetNameValue(
const char *pszKey,
const char *pszValue );
341 CPLStringList &Assign(
char **papszList,
int bTakeOwnership=TRUE );
342 CPLStringList &operator=(
char **papszListIn) {
return Assign( papszListIn, TRUE ); }
345 char * operator[](
int i);
346 char * operator[](
size_t i) {
return (*
this)[(int)i]; }
347 const char * operator[](
int i)
const;
348 const char * operator[](
size_t i)
const {
return (*
this)[(int)i]; }
350 char **List() {
return papszList; }
354 int IsSorted()
const {
return bIsSorted; }
356 operator char**(void) {
return List(); }