Home | History | Annotate | Download | only in Tools
      1 /*!****************************************************************************
      2 
      3  @file         PVRTString.h
      4  @copyright    Copyright (c) Imagination Technologies Limited.
      5  @brief        A string class that can be used as drop-in replacement for
      6                std::string on platforms/compilers that don't provide a full C++
      7                standard library.
      8 
      9 ******************************************************************************/
     10 #ifndef _PVRTSTRING_H_
     11 #define _PVRTSTRING_H_
     12 
     13 #include <stdio.h>
     14 #define _USING_PVRTSTRING_
     15 
     16 /*!***************************************************************************
     17  @class CPVRTString
     18  @brief A string class
     19 *****************************************************************************/
     20 
     21 #if defined(_WINDLL_EXPORT)
     22 class __declspec(dllexport) CPVRTString
     23 #elif defined(_WINDLL_IMPORT)
     24 class __declspec(dllimport) CPVRTString
     25 #else
     26 class CPVRTString
     27 #endif
     28 {
     29 
     30 private:
     31 
     32 	// Checking printf and scanf format strings
     33 #if defined(_CC_GNU_) || defined(__GNUG__) || defined(__GNUC__)
     34 #define FX_PRINTF(fmt,arg) __attribute__((format(printf,fmt,arg)))
     35 #define FX_SCANF(fmt,arg)  __attribute__((format(scanf,fmt,arg)))
     36 #else
     37 #define FX_PRINTF(fmt,arg)
     38 #define FX_SCANF(fmt,arg)
     39 #endif
     40 
     41 public:
     42 	typedef	size_t	size_type;
     43 	typedef	char value_type;
     44 	typedef	char& reference;
     45 	typedef	const char& const_reference;
     46 
     47 	static const size_type npos;
     48 
     49 
     50 
     51 
     52 	/*!***********************************************************************
     53 	@brief      		CPVRTString constructor
     54 	@param[in]				_Ptr	A string
     55 	@param[in]				_Count	Length of _Ptr
     56 	************************************************************************/
     57 	CPVRTString(const char* _Ptr, size_t _Count = npos);
     58 
     59 	/*!***********************************************************************
     60 	@brief      		CPVRTString constructor
     61 	@param[in]				_Right	A string
     62 	@param[in]				_Roff	Offset into _Right
     63 	@param[in]				_Count	Number of chars from _Right to assign to the new string
     64 	************************************************************************/
     65 	CPVRTString(const CPVRTString& _Right, size_t _Roff = 0, size_t _Count = npos);
     66 
     67 	/*!***********************************************************************
     68 	@brief      		CPVRTString constructor
     69 	@param[in]				_Count	Length of new string
     70 	@param[in]				_Ch		A char to fill it with
     71 	*************************************************************************/
     72 	CPVRTString(size_t _Count, const char _Ch);
     73 
     74 	/*!***********************************************************************
     75 	@brief      		Constructor
     76 	@param[in]				_Ch	A char
     77 	*************************************************************************/
     78 	CPVRTString(const char _Ch);
     79 
     80 	/*!***********************************************************************
     81 	@brief      		Constructor
     82 	************************************************************************/
     83 	CPVRTString();
     84 
     85 	/*!***********************************************************************
     86 	@brief      		Destructor
     87 	************************************************************************/
     88 	virtual ~CPVRTString();
     89 
     90 	/*!***********************************************************************
     91 	@brief      		Appends a string
     92 	@param[in]			_Ptr	A string
     93 	@return 			Updated string
     94 	*************************************************************************/
     95 	CPVRTString& append(const char* _Ptr);
     96 
     97 	/*!***********************************************************************
     98 	@brief      		Appends a string of length _Count
     99 	@param[in]			_Ptr	A string
    100 	@param[in]			_Count	String length
    101 	@return 			Updated string
    102 	*************************************************************************/
    103 	CPVRTString& append(const char* _Ptr, size_t _Count);
    104 
    105 	/*!***********************************************************************
    106 	@brief      		Appends a string
    107 	@param[in]			_Str	A string
    108 	@return 			Updated string
    109 	*************************************************************************/
    110 	CPVRTString& append(const CPVRTString& _Str);
    111 
    112 	/*!***********************************************************************
    113 	@brief      		Appends _Count letters of _Str from _Off in _Str
    114 	@param[in]			_Str	A string
    115 	@param[in]			_Off	A position in string
    116 	@param[in]			_Count	Number of letters to append
    117 	@return 			Updated string
    118 	*************************************************************************/
    119 	CPVRTString& append(const CPVRTString& _Str, size_t _Off, size_t _Count);
    120 
    121 	/*!***********************************************************************
    122 	@brief      		Appends _Ch _Count times
    123 	@param[in]				_Ch		A char
    124 	@param[in]				_Count	Number of times to append _Ch
    125 	@return 			Updated string
    126 	*************************************************************************/
    127 	CPVRTString& append(size_t _Count, const char _Ch);
    128 
    129 	//template<class InputIterator> CPVRTString& append(InputIterator _First, InputIterator _Last);
    130 
    131 	/*!***********************************************************************
    132 	@brief      		Assigns the string to the string _Ptr
    133 	@param[in]			_Ptr A string
    134 	@return 			Updated string
    135 	*************************************************************************/
    136 	CPVRTString& assign(const char* _Ptr);
    137 
    138 	/*!***********************************************************************
    139 	@brief      		Assigns the string to the string _Ptr
    140 	@param[in]			_Ptr A string
    141 	@param[in]			_Count Length of _Ptr
    142 	@return 			Updated string
    143 	*************************************************************************/
    144 	CPVRTString& assign(const char* _Ptr, size_t _Count);
    145 
    146 	/*!***********************************************************************
    147 	@brief      		Assigns the string to the string _Str
    148 	@param[in]			_Str A string
    149 	@return 			Updated string
    150 	*************************************************************************/
    151 	CPVRTString& assign(const CPVRTString& _Str);
    152 
    153 	/*!***********************************************************************
    154 	@brief      		Assigns the string to _Count characters in string _Str starting at _Off
    155 	@param[in]			_Str A string
    156 	@param[in]			_Off First char to start assignment from
    157 	@param[in]			_Count Length of _Str
    158 	@return 			Updated string
    159 	*************************************************************************/
    160 	CPVRTString& assign(const CPVRTString& _Str, size_t _Off, size_t _Count=npos);
    161 
    162 	/*!***********************************************************************
    163 	@brief      		Assigns the string to _Count copies of _Ch
    164 	@param[in]			_Ch A string
    165 	@param[in]			_Count Number of times to repeat _Ch
    166 	@return 			Updated string
    167 	*************************************************************************/
    168 	CPVRTString& assign(size_t _Count, char _Ch);
    169 
    170 	//template<class InputIterator> CPVRTString& assign(InputIterator _First, InputIterator _Last);
    171 
    172 	//const_reference at(size_t _Off) const;
    173 	//reference at(size_t _Off);
    174 
    175 	// const_iterator begin() const;
    176 	// iterator begin();
    177 
    178 	/*!***********************************************************************
    179 	@brief      		Returns a const char* pointer of the string
    180 	@return 			const char* pointer of the string
    181 	*************************************************************************/
    182 	const char* c_str() const;
    183 
    184 	/*!***********************************************************************
    185 	@brief      		Returns the size of the character array reserved
    186 	@return 			The size of the character array reserved
    187 	*************************************************************************/
    188 	size_t capacity() const;
    189 
    190 	/*!***********************************************************************
    191 	@brief      		Clears the string
    192 	*************************************************************************/
    193 	void clear();
    194 
    195 	/*!***********************************************************************
    196 	@brief      		Compares the string with _Str
    197 	@param[in]			_Str A string to compare with
    198 	@return 			0 if the strings match
    199 	*************************************************************************/
    200 	int compare(const CPVRTString& _Str) const;
    201 
    202 	/*!***********************************************************************
    203 	@brief      		Compares the string with _Str
    204 	@param[in]			_Pos1	Position to start comparing from
    205 	@param[in]			_Num1	Number of chars to compare
    206 	@param[in]			_Str 	A string to compare with
    207 	@return 			0 if the strings match
    208 	*************************************************************************/
    209 	int compare(size_t _Pos1, size_t _Num1, const CPVRTString& _Str) const;
    210 
    211 	/*!***********************************************************************
    212 	@brief      		Compares the string with _Str
    213 	@param[in]			_Pos1	Position to start comparing from
    214 	@param[in]			_Num1	Number of chars to compare
    215 	@param[in]			_Str 	A string to compare with
    216 	@param[in]			_Off 	Position in _Str to compare from
    217 	@param[in]			_Count	Number of chars in _Str to compare with
    218 	@return 			0 if the strings match
    219 	*************************************************************************/
    220 	int compare(size_t _Pos1, size_t _Num1, const CPVRTString& _Str, size_t _Off, size_t _Count) const;
    221 
    222 	/*!***********************************************************************
    223 	@brief      		Compares the string with _Ptr
    224 	@param[in]			_Ptr A string to compare with
    225 	@return 			0 if the strings match
    226 	*************************************************************************/
    227 	int compare(const char* _Ptr) const;
    228 
    229 	/*!***********************************************************************
    230 	@brief      		Compares the string with _Ptr
    231 	@param[in]			_Pos1	Position to start comparing from
    232 	@param[in]			_Num1	Number of chars to compare
    233 	@param[in]			_Ptr 	A string to compare with
    234 	@return 			0 if the strings match
    235 	*************************************************************************/
    236 	int compare(size_t _Pos1, size_t _Num1, const char* _Ptr) const;
    237 
    238 	/*!***********************************************************************
    239 	@brief      		Compares the string with _Str
    240 	@param[in]			_Pos1	Position to start comparing from
    241 	@param[in]			_Num1	Number of chars to compare
    242 	@param[in]			_Ptr 	A string to compare with
    243 	@param[in]			_Count	Number of chars to compare
    244 	@return 			0 if the strings match
    245 	*************************************************************************/
    246 	int compare(size_t _Pos1, size_t _Num1, const char* _Ptr, size_t _Count) const;
    247 
    248 	/*!***********************************************************************
    249 	@brief      		Less than operator
    250 	@param[in]			_Str A string to compare with
    251 	@return 			True on success
    252 	*************************************************************************/
    253 	bool operator<(const CPVRTString & _Str) const;
    254 
    255 	/*!***********************************************************************
    256 	@brief      	== Operator
    257 	@param[in]		_Str 	A string to compare with
    258 	@return 		True if they match
    259 	*************************************************************************/
    260 	bool operator==(const CPVRTString& _Str) const;
    261 
    262 	/*!***********************************************************************
    263 	@brief      	== Operator
    264 	@param[in]		_Ptr 	A string to compare with
    265 	@return 		True if they match
    266 	*************************************************************************/
    267 	bool operator==(const char* const _Ptr) const;
    268 
    269 	/*!***********************************************************************
    270 	@brief      		!= Operator
    271 	@param[in]				_Str 	A string to compare with
    272 	@return 			True if they don't match
    273 	*************************************************************************/
    274 	bool operator!=(const CPVRTString& _Str) const;
    275 
    276 	/*!***********************************************************************
    277 	@brief      		!= Operator
    278 	@param[in]			_Ptr 	A string to compare with
    279 	@return 			True if they don't match
    280 	*************************************************************************/
    281 	bool operator!=(const char* const _Ptr) const;
    282 
    283 	/*!***********************************************************************
    284 	@fn       			copy
    285 	@param[in,out]		_Ptr 	A string to copy to
    286 	@param[in]			_Count	Size of _Ptr
    287 	@param[in]			_Off	Position to start copying from
    288 	@return 			Number of bytes copied
    289 	@brief      		Copies the string to _Ptr
    290 	*************************************************************************/
    291 	size_t copy(char* _Ptr, size_t _Count, size_t _Off = 0) const;
    292 
    293 	/*!***********************************************************************
    294 	@fn       			data
    295 	@return 			A const char* version of the string
    296 	@brief      		Returns a const char* version of the string
    297 	*************************************************************************/
    298 	const char* data( ) const;
    299 
    300 	/*!***********************************************************************
    301 	@fn       			empty
    302 	@return 			True if the string is empty
    303 	@brief      		Returns true if the string is empty
    304 	*************************************************************************/
    305 	bool empty() const;
    306 
    307 	// const_iterator end() const;
    308 	// iterator end();
    309 
    310 	//iterator erase(iterator _First, iterator _Last);
    311 	//iterator erase(iterator _It);
    312 
    313 	/*!***********************************************************************
    314 	@brief      		Erases a portion of the string
    315 	@param[in]			_Pos	The position to start erasing from
    316 	@param[in]			_Count	Number of chars to erase
    317 	@return 			An updated string
    318 	*************************************************************************/
    319 	CPVRTString& erase(size_t _Pos = 0, size_t _Count = npos);
    320 
    321 	/*!***********************************************************************
    322 	@brief      		Erases a portion of the string
    323 	@param[in]			_src	Character to search
    324 	@param[in]			_subDes	Character to substitute for
    325 	@param[in]			_all	Substitute all
    326 	@return 			An updated string
    327 	*************************************************************************/
    328 	CPVRTString& substitute(char _src,char _subDes, bool _all = true);
    329 
    330 	/*!***********************************************************************
    331 	@brief      		Erases a portion of the string
    332 	@param[in]			_src	Character to search
    333 	@param[in]			_subDes	Character to substitute for
    334 	@param[in]			_all	Substitute all
    335 	@return 			An updated string
    336 	*************************************************************************/
    337 	CPVRTString& substitute(const char* _src, const char* _subDes, bool _all = true);
    338 
    339 	//size_t find(char _Ch, size_t _Off = 0) const;
    340 	//size_t find(const char* _Ptr, size_t _Off = 0) const;
    341 
    342 	/*!***********************************************************************
    343 	@brief      		Finds a substring within this string.
    344 	@param[in]			_Ptr	String to search.
    345 	@param[in]			_Off	Offset to search from.
    346 	@param[in]			_Count	Number of characters in this string.
    347 	@return 			Position of the first matched string.
    348 	*************************************************************************/
    349 	size_t find(const char* _Ptr, size_t _Off, size_t _Count) const;
    350 
    351 	/*!***********************************************************************
    352 	@brief      		Finds a substring within this string.
    353 	@param[in]			_Str	String to search.
    354 	@param[in]			_Off	Offset to search from.
    355 	@return 			Position of the first matched string.
    356 	*************************************************************************/
    357 	size_t find(const CPVRTString& _Str, size_t _Off = 0) const;
    358 
    359 	/*!***********************************************************************
    360 	@brief      		Returns the position of the first char that is not _Ch
    361 	@param[in]			_Ch		A char
    362 	@param[in]			_Off	Start position of the find
    363 	@return 			Position of the first char that is not _Ch
    364 	*************************************************************************/
    365 	size_t find_first_not_of(char _Ch, size_t _Off = 0) const;
    366 
    367 	/*!***********************************************************************
    368 	@brief      		Returns the position of the first char that is not in _Ptr
    369 	@param[in]			_Ptr	A string
    370 	@param[in]			_Off	Start position of the find
    371 	@return 			Position of the first char that is not in _Ptr
    372 	*************************************************************************/
    373 	size_t find_first_not_of(const char* _Ptr, size_t _Off = 0) const;
    374 
    375 	/*!***********************************************************************
    376 	@brief      		Returns the position of the first char that is not in _Ptr
    377 	@param[in]			_Ptr	A string
    378 	@param[in]			_Off	Start position of the find
    379 	@param[in]			_Count	Number of chars in _Ptr
    380 	@return 			Position of the first char that is not in _Ptr
    381 	*************************************************************************/
    382 	size_t find_first_not_of(const char* _Ptr, size_t _Off, size_t _Count) const;
    383 
    384 	/*!***********************************************************************
    385 	@brief      		Returns the position of the first char that is not in _Str
    386 	@param[in]			_Str	A string
    387 	@param[in]			_Off	Start position of the find
    388 	@return 			Position of the first char that is not in _Str
    389 	*************************************************************************/
    390 	size_t find_first_not_of(const CPVRTString& _Str, size_t _Off = 0) const;
    391 
    392 	/*!***********************************************************************
    393 	@brief      		Returns the position of the first char that is _Ch
    394 	@param[in]			_Ch		A char
    395 	@param[in]			_Off	Start position of the find
    396 	@return 			Position of the first char that is _Ch
    397 	*************************************************************************/
    398 	size_t find_first_of(char _Ch, size_t _Off = 0) const;
    399 
    400 	/*!***********************************************************************
    401 	@brief      		Returns the position of the first char that matches a char in _Ptr
    402 	@param[in]			_Ptr	A string
    403 	@param[in]			_Off	Start position of the find
    404 	@return 			Position of the first char that matches a char in _Ptr
    405 	*************************************************************************/
    406 	size_t find_first_of(const char* _Ptr, size_t _Off = 0) const;
    407 
    408 	/*!***********************************************************************
    409 	@brief      		Returns the position of the first char that matches a char in _Ptr
    410 	@param[in]			_Ptr	A string
    411 	@param[in]			_Off	Start position of the find
    412 	@param[in]			_Count	Size of _Ptr
    413 	@return 			Position of the first char that matches a char in _Ptr
    414 	*************************************************************************/
    415 	size_t find_first_of(const char* _Ptr, size_t _Off, size_t _Count) const;
    416 
    417 	/*!***********************************************************************
    418 	@brief      		Returns the position of the first char that matches all chars in _Ptr
    419 	@param[in]			_Ptr	A string
    420 	@param[in]			_Off	Start position of the find
    421 	@param[in]			_Count	Size of _Ptr
    422 	@return 			Position of the first char that matches a char in _Ptr
    423 	*************************************************************************/
    424 	size_t find_first_ofn(const char* _Ptr, size_t _Off, size_t _Count) const;
    425 
    426 
    427 	/*!***********************************************************************
    428 	@brief      		Returns the position of the first char that matches a char in _Str
    429 	@param[in]			_Str	A string
    430 	@param[in]			_Off	Start position of the find
    431 	@return 			Position of the first char that matches a char in _Str
    432 	*************************************************************************/
    433 	size_t find_first_of(const CPVRTString& _Str, size_t _Off = 0) const;
    434 
    435 	/*!***********************************************************************
    436 	@brief      		Returns the position of the last char that is not _Ch
    437 	@param[in]			_Ch		A char
    438 	@param[in]			_Off	Start position of the find
    439 	@return 			Position of the last char that is not _Ch
    440 	*************************************************************************/
    441 	size_t find_last_not_of(char _Ch, size_t _Off = 0) const;
    442 
    443 	/*!***********************************************************************
    444 	@brief      		Returns the position of the last char that is not in _Ptr
    445 	@param[in]			_Ptr	A string
    446 	@param[in]			_Off	Start position of the find
    447 	@return 			Position of the last char that is not in _Ptr
    448 	*************************************************************************/
    449 	size_t find_last_not_of(const char* _Ptr, size_t _Off = 0) const;
    450 
    451 	/*!***********************************************************************
    452 	@brief      		Returns the position of the last char that is not in _Ptr
    453 	@param[in]			_Ptr	A string
    454 	@param[in]			_Off	Start position of the find
    455 	@param[in]			_Count	Length of _Ptr
    456 	@return 			Position of the last char that is not in _Ptr
    457 	*************************************************************************/
    458 	size_t find_last_not_of(const char* _Ptr, size_t _Off, size_t _Count) const;
    459 
    460 	/*!***********************************************************************
    461 	@brief      		Returns the position of the last char that is not in _Str
    462 	@param[in]			_Str	A string
    463 	@param[in]			_Off	Start position of the find
    464 	@return 			Position of the last char that is not in _Str
    465 	*************************************************************************/
    466 	size_t find_last_not_of(const CPVRTString& _Str, size_t _Off = 0) const;
    467 
    468 	/*!***********************************************************************
    469 	@brief      		Returns the position of the last char that is _Ch
    470 	@param[in]			_Ch		A char
    471 	@param[in]			_Off	Start position of the find
    472 	@return 			Position of the last char that is _Ch
    473 	*************************************************************************/
    474 	size_t find_last_of(char _Ch, size_t _Off = 0) const;
    475 
    476 	/*!***********************************************************************
    477 	@brief      		Returns the position of the last char that is in _Ptr
    478 	@param[in]			_Ptr	A string
    479 	@param[in]			_Off	Start position of the find
    480 	@return 			Position of the last char that is in _Ptr
    481 	*************************************************************************/
    482 	size_t find_last_of(const char* _Ptr, size_t _Off = 0) const;
    483 
    484 	/*!***********************************************************************
    485 	@brief      		Returns the position of the last char that is in _Ptr
    486 	@param[in]			_Ptr	A string
    487 	@param[in]			_Off	Start position of the find
    488 	@param[in]			_Count	Length of _Ptr
    489 	@return 			Position of the last char that is in _Ptr
    490 	*************************************************************************/
    491 	size_t find_last_of(const char* _Ptr, size_t _Off, size_t _Count) const;
    492 
    493 	/*!***********************************************************************
    494 	@brief      		Returns the position of the last char that is in _Str
    495 	@param[in]			_Str	A string
    496 	@param[in]			_Off	Start position of the find
    497 	@return 			Position of the last char that is in _Str
    498 	*************************************************************************/
    499 	size_t find_last_of(const CPVRTString& _Str, size_t _Off = 0) const;
    500 
    501 	/*!***********************************************************************
    502 	@brief      		Returns the number of occurances of _Ch in the parent string.
    503 	@param[in]			_Ch		A char
    504 	@param[in]			_Off	Start position of the find
    505 	@return 			Number of occurances of _Ch in the parent string.
    506 	*************************************************************************/
    507 	size_t find_number_of(char _Ch, size_t _Off = 0) const;
    508 
    509 	/*!***********************************************************************
    510 	@brief      		Returns the number of occurances of _Ptr in the parent string.
    511 	@param[in]			_Ptr	A string
    512 	@param[in]			_Off	Start position of the find
    513 	@return 			Number of occurances of _Ptr in the parent string.
    514 	*************************************************************************/
    515 	size_t find_number_of(const char* _Ptr, size_t _Off = 0) const;
    516 
    517 	/*!***********************************************************************
    518 	@brief      		Returns the number of occurances of _Ptr in the parent string.
    519 	@param[in]			_Ptr	A string
    520 	@param[in]			_Off	Start position of the find
    521 	@param[in]			_Count	Size of _Ptr
    522 	@return 			Number of occurances of _Ptr in the parent string.
    523 	*************************************************************************/
    524 	size_t find_number_of(const char* _Ptr, size_t _Off, size_t _Count) const;
    525 
    526 	/*!***********************************************************************
    527 	@brief      		Returns the number of occurances of _Str in the parent string.
    528 	@param[in]			_Str	A string
    529 	@param[in]			_Off	Start position of the find
    530 	@return 			Number of occurances of _Str in the parent string.
    531 	*************************************************************************/
    532 	size_t find_number_of(const CPVRTString& _Str, size_t _Off = 0) const;
    533 
    534 	/*!***********************************************************************
    535 	@brief      		Returns the next occurance of _Ch in the parent string
    536                         after or at _Off.	If not found, returns the length of the string.
    537 	@param[in]			_Ch		A char
    538 	@param[in]			_Off	Start position of the find
    539 	@return 			Next occurance of _Ch in the parent string.
    540 	*************************************************************************/
    541 	int find_next_occurance_of(char _Ch, size_t _Off = 0) const;
    542 
    543 	/*!***********************************************************************
    544 	@brief      		Returns the next occurance of _Ptr in the parent string
    545                         after or at _Off.	If not found, returns the length of the string.
    546 	@param[in]			_Ptr	A string
    547 	@param[in]			_Off	Start position of the find
    548 	@return 			Next occurance of _Ptr in the parent string.
    549 	*************************************************************************/
    550 	int find_next_occurance_of(const char* _Ptr, size_t _Off = 0) const;
    551 
    552 	/*!***********************************************************************
    553 	@brief      		Returns the next occurance of _Ptr in the parent string
    554                         after or at _Off.	If not found, returns the length of the string.
    555 	@param[in]			_Ptr	A string
    556 	@param[in]			_Off	Start position of the find
    557 	@param[in]			_Count	Size of _Ptr
    558 	@return 			Next occurance of _Ptr in the parent string.
    559 	*************************************************************************/
    560 	int find_next_occurance_of(const char* _Ptr, size_t _Off, size_t _Count) const;
    561 
    562 	/*!***********************************************************************
    563 	@brief      		Returns the next occurance of _Str in the parent string
    564                         after or at _Off.	If not found, returns the length of the string.
    565 	@param[in]			_Str	A string
    566 	@param[in]			_Off	Start position of the find
    567 	@return 			Next occurance of _Str in the parent string.
    568 	*************************************************************************/
    569 	int find_next_occurance_of(const CPVRTString& _Str, size_t _Off = 0) const;
    570 
    571 	/*!***********************************************************************
    572 	@brief      		Returns the previous occurance of _Ch in the parent string
    573                         before _Off.	If not found, returns -1.
    574 	@param[in]			_Ch		A char
    575 	@param[in]			_Off	Start position of the find
    576 	@return 			Previous occurance of _Ch in the parent string.
    577 	*************************************************************************/
    578 	int find_previous_occurance_of(char _Ch, size_t _Off = 0) const;
    579 
    580 	/*!***********************************************************************
    581 	@brief      		Returns the previous occurance of _Ptr in the parent string
    582                         before _Off.	If not found, returns -1.
    583 	@param[in]			_Ptr	A string
    584 	@param[in]			_Off	Start position of the find
    585 	@return 			Previous occurance of _Ptr in the parent string.
    586 	*************************************************************************/
    587 	int find_previous_occurance_of(const char* _Ptr, size_t _Off = 0) const;
    588 
    589 	/*!***********************************************************************
    590 	@brief      		Returns the previous occurance of _Ptr in the parent string
    591                         before _Off.	If not found, returns -1.
    592 	@param[in]			_Ptr	A string
    593 	@param[in]			_Off	Start position of the find
    594 	@param[in]			_Count	Size of _Ptr
    595 	@return 			Previous occurance of _Ptr in the parent string.
    596 	*************************************************************************/
    597 	int find_previous_occurance_of(const char* _Ptr, size_t _Off, size_t _Count) const;
    598 
    599 	/*!***********************************************************************
    600 	@brief      		Returns the previous occurance of _Str in the parent string
    601                         before _Off.	If not found, returns -1.
    602 	@param[in]			_Str	A string
    603 	@param[in]			_Off	Start position of the find
    604 	@return 			Previous occurance of _Str in the parent string.
    605 	*************************************************************************/
    606 	int find_previous_occurance_of(const CPVRTString& _Str, size_t _Off = 0) const;
    607 
    608 	/*!***********************************************************************
    609 	@fn       			left
    610 	@param[in]			iSize	number of characters to return (excluding null character)
    611 	@return 			The leftmost 'iSize' characters of the string.
    612 	@brief      		Returns the leftmost characters of the string (excluding
    613 	the null character) in a new CPVRTString. If iSize is
    614 	larger than the string, a copy of the original string is returned.
    615 	*************************************************************************/
    616 	CPVRTString left(size_t iSize) const;
    617 
    618 	/*!***********************************************************************
    619 	@fn       			right
    620 	@param[in]			iSize	number of characters to return (excluding null character)
    621 	@return 			The rightmost 'iSize' characters of the string.
    622 	@brief      		Returns the rightmost characters of the string (excluding
    623 	the null character) in a new CPVRTString. If iSize is
    624 	larger than the string, a copy of the original string is returned.
    625 	*************************************************************************/
    626 	CPVRTString right(size_t iSize) const;
    627 
    628 	//allocator_type get_allocator( ) const;
    629 
    630 	//CPVRTString& insert(size_t _P0, const char* _Ptr);
    631 	//CPVRTString& insert(size_t _P0, const char* _Ptr, size_t _Count);
    632 	//CPVRTString& insert(size_t _P0, const CPVRTString& _Str);
    633 	//CPVRTString& insert(size_t _P0, const CPVRTString& _Str, size_t _Off, size_t _Count);
    634 	//CPVRTString& insert(size_t _P0, size_t _Count, char _Ch);
    635 	//iterator insert(iterator _It, char _Ch = char());
    636 	//template<class InputIterator> void insert(iterator _It, InputIterator _First, InputIterator _Last);
    637 	//void insert(iterator _It, size_t _Count, char _Ch);
    638 
    639 	/*!***********************************************************************
    640 	@fn       			length
    641 	@return 			Length of the string
    642 	@brief      		Returns the length of the string
    643 	*************************************************************************/
    644 	size_t length() const;
    645 
    646 	/*!***********************************************************************
    647 	@fn       			max_size
    648 	@return 			The maximum number of chars that the string can contain
    649 	@brief      		Returns the maximum number of chars that the string can contain
    650 	*************************************************************************/
    651 	size_t max_size() const;
    652 
    653 	/*!***********************************************************************
    654 	@fn       			push_back
    655 	@param[in]			_Ch A char to append
    656 	@brief      		Appends _Ch to the string
    657 	*************************************************************************/
    658 	void push_back(char _Ch);
    659 
    660 	// const_reverse_iterator rbegin() const;
    661 	// reverse_iterator rbegin();
    662 
    663 	// const_reverse_iterator rend() const;
    664 	// reverse_iterator rend();
    665 
    666 	//CPVRTString& replace(size_t _Pos1, size_t _Num1, const char* _Ptr);
    667 	//CPVRTString& replace(size_t _Pos1, size_t _Num1, const CPVRTString& _Str);
    668 	//CPVRTString& replace(size_t _Pos1, size_t _Num1, const char* _Ptr, size_t _Num2);
    669 	//CPVRTString& replace(size_t _Pos1, size_t _Num1, const CPVRTString& _Str, size_t _Pos2, size_t _Num2);
    670 	//CPVRTString& replace(size_t _Pos1, size_t _Num1, size_t _Count, char _Ch);
    671 
    672 	//CPVRTString& replace(iterator _First0, iterator _Last0, const char* _Ptr);
    673 	//CPVRTString& replace(iterator _First0, iterator _Last0, const CPVRTString& _Str);
    674 	//CPVRTString& replace(iterator _First0, iterator _Last0, const char* _Ptr, size_t _Num2);
    675 	//CPVRTString& replace(iterator _First0, iterator _Last0, size_t _Num2, char _Ch);
    676 	//template<class InputIterator> CPVRTString& replace(iterator _First0, iterator _Last0, InputIterator _First, InputIterator _Last);
    677 
    678 	/*!***********************************************************************
    679 	@fn       			reserve
    680 	@param[in]			_Count Size of string to reserve
    681 	@brief      		Reserves space for _Count number of chars
    682 	*************************************************************************/
    683 	void reserve(size_t _Count = 0);
    684 
    685 	/*!***********************************************************************
    686 	@fn       			resize
    687 	@param[in]			_Count 	Size of string to resize to
    688 	@param[in]			_Ch		Character to use to fill any additional space
    689 	@brief      		Resizes the string to _Count in length
    690 	*************************************************************************/
    691 	void resize(size_t _Count, char _Ch = char());
    692 
    693 	//size_t rfind(char _Ch, size_t _Off = npos) const;
    694 	//size_t rfind(const char* _Ptr, size_t _Off = npos) const;
    695 	//size_t rfind(const char* _Ptr, size_t _Off = npos, size_t _Count) const;
    696 	//size_t rfind(const CPVRTString& _Str, size_t _Off = npos) const;
    697 
    698 	/*!***********************************************************************
    699 	@fn       			size
    700 	@return 			Size of the string
    701 	@brief      		Returns the size of the string
    702 	*************************************************************************/
    703 	size_t size() const;
    704 
    705 	/*!***********************************************************************
    706 	@fn       			substr
    707 	@param[in]			_Off	Start of the substring
    708 	@param[in]			_Count	Length of the substring
    709 	@return 			A substring of the string
    710 	@brief      		Returns the size of the string
    711 	*************************************************************************/
    712 	CPVRTString substr(size_t _Off = 0, size_t _Count = npos) const;
    713 
    714 	/*!***********************************************************************
    715 	@fn       			swap
    716 	@param[in]			_Str	A string to swap with
    717 	@brief      		Swaps the contents of the string with _Str
    718 	*************************************************************************/
    719 	void swap(CPVRTString& _Str);
    720 
    721 	/*!***********************************************************************
    722 	@fn       			toLower
    723 	@return 			An updated string
    724 	@brief      		Converts the string to lower case
    725 	*************************************************************************/
    726 	CPVRTString& toLower();
    727 
    728 	/*!***********************************************************************
    729 	@fn       			toUpper
    730 	@return 			An updated string
    731 	@brief      		Converts the string to upper case
    732 	*************************************************************************/
    733 	CPVRTString& toUpper();
    734 
    735 	/*!***********************************************************************
    736 	@fn       			format
    737 	@param[in]			pFormat A string containing the formating
    738 	@return 			A formatted string
    739 	@brief      		return the formatted string
    740 	************************************************************************/
    741 	CPVRTString format(const char *pFormat, ...);
    742 
    743 	/*!***********************************************************************
    744 	@brief      		+= Operator
    745 	@param[in]			_Ch A char
    746 	@return 			An updated string
    747 	*************************************************************************/
    748 	CPVRTString& operator+=(char _Ch);
    749 
    750 	/*!***********************************************************************
    751 	@brief      		+= Operator
    752 	@param[in]			_Ptr A string
    753 	@return 			An updated string
    754 	*************************************************************************/
    755 	CPVRTString& operator+=(const char* _Ptr);
    756 
    757 	/*!***********************************************************************
    758 	@brief      		+= Operator
    759 	@param[in]			_Right A string
    760 	@return 			An updated string
    761 	*************************************************************************/
    762 	CPVRTString& operator+=(const CPVRTString& _Right);
    763 
    764 	/*!***********************************************************************
    765 	@brief      		= Operator
    766 	@param[in]			_Ch A char
    767 	@return 			An updated string
    768 	*************************************************************************/
    769 	CPVRTString& operator=(char _Ch);
    770 
    771 	/*!***********************************************************************
    772 	@brief      		= Operator
    773 	@param[in]			_Ptr A string
    774 	@return 			An updated string
    775 	*************************************************************************/
    776 	CPVRTString& operator=(const char* _Ptr);
    777 
    778 	/*!***********************************************************************
    779 	@brief      		= Operator
    780 	@param[in]			_Right A string
    781 	@return 			An updated string
    782 	*************************************************************************/
    783 	CPVRTString& operator=(const CPVRTString& _Right);
    784 
    785 	/*!***********************************************************************
    786 	@brief      		[] Operator
    787 	@param[in]			_Off An index into the string
    788 	@return 			A character
    789 	*************************************************************************/
    790 	const_reference operator[](size_t _Off) const;
    791 
    792 	/*!***********************************************************************
    793 	@brief      		[] Operator
    794 	@param[in]			_Off An index into the string
    795 	@return 			A character
    796 	*************************************************************************/
    797 	reference operator[](size_t _Off);
    798 
    799 	/*!***********************************************************************
    800 	@brief      		+ Operator
    801 	@param[in]			_Left A string
    802 	@param[in]			_Right A string
    803 	@return 			An updated string
    804 	*************************************************************************/
    805 	friend CPVRTString operator+ (const CPVRTString& _Left, const CPVRTString& _Right);
    806 
    807 	/*!***********************************************************************
    808 	@brief      		+ Operator
    809 	@param[in]			_Left A string
    810 	@param[in]			_Right A string
    811 	@return 			An updated string
    812 	*************************************************************************/
    813 	friend CPVRTString operator+ (const CPVRTString& _Left, const char* _Right);
    814 
    815 	/*!***********************************************************************
    816 	@brief      		+ Operator
    817 	@param[in]			_Left A string
    818 	@param[in]			_Right A string
    819 	@return 			An updated string
    820 	*************************************************************************/
    821 	friend CPVRTString operator+ (const CPVRTString& _Left, const char _Right);
    822 
    823 	/*!***********************************************************************
    824 	@brief      		+ Operator
    825 	@param[in]			_Left A string
    826 	@param[in]			_Right A string
    827 	@return 			An updated string
    828 	*************************************************************************/
    829 	friend CPVRTString operator+ (const char* _Left, const CPVRTString& _Right);
    830 
    831 
    832 	/*!***********************************************************************
    833 	@brief      		+ Operator
    834 	@param[in]			_Left A string
    835 	@param[in]			_Right A string
    836 	@return 			An updated string
    837 	*************************************************************************/
    838 	friend CPVRTString operator+ (const char _Left, const CPVRTString& _Right);
    839 
    840 protected:
    841 	char* m_pString;
    842 	size_t m_Size;
    843 	size_t m_Capacity;
    844 };
    845 
    846 /*************************************************************************
    847 * MISCELLANEOUS UTILITY FUNCTIONS
    848 *************************************************************************/
    849 /*!***********************************************************************
    850  @fn       			PVRTStringGetFileExtension
    851  @param[in]			strFilePath A string
    852  @return 			Extension
    853  @brief      		Extracts the file extension from a file path.
    854                     Returns an empty CPVRTString if no extension is found.
    855 ************************************************************************/
    856 CPVRTString PVRTStringGetFileExtension(const CPVRTString& strFilePath);
    857 
    858 /*!***********************************************************************
    859  @fn       			PVRTStringGetContainingDirectoryPath
    860  @param[in]			strFilePath A string
    861  @return 			Directory
    862  @brief      		Extracts the directory portion from a file path.
    863 ************************************************************************/
    864 CPVRTString PVRTStringGetContainingDirectoryPath(const CPVRTString& strFilePath);
    865 
    866 /*!***********************************************************************
    867  @fn       			PVRTStringGetFileName
    868  @param[in]			strFilePath A string
    869  @return 			FileName
    870  @brief      		Extracts the name and extension portion from a file path.
    871 ************************************************************************/
    872 CPVRTString PVRTStringGetFileName(const CPVRTString& strFilePath);
    873 
    874 /*!***********************************************************************
    875  @fn       			PVRTStringStripWhiteSpaceFromStartOf
    876  @param[in]			strLine A string
    877  @return 			Result of the white space stripping
    878  @brief      		strips white space characters from the beginning of a CPVRTString.
    879 ************************************************************************/
    880 CPVRTString PVRTStringStripWhiteSpaceFromStartOf(const CPVRTString& strLine);
    881 
    882 /*!***********************************************************************
    883  @fn       			PVRTStringStripWhiteSpaceFromEndOf
    884  @param[in]			strLine A string
    885  @return 			Result of the white space stripping
    886  @brief      		strips white space characters from the end of a CPVRTString.
    887 ************************************************************************/
    888 CPVRTString PVRTStringStripWhiteSpaceFromEndOf(const CPVRTString& strLine);
    889 
    890 /*!***********************************************************************
    891  @fn       			PVRTStringFromFormattedStr
    892  @param[in]			pFormat A string containing the formating
    893  @return 			A formatted string
    894  @brief      		Creates a formatted string
    895 ************************************************************************/
    896 CPVRTString PVRTStringFromFormattedStr(const char *pFormat, ...);
    897 
    898 #endif // _PVRTSTRING_H_
    899 
    900 
    901 /*****************************************************************************
    902 End of file (PVRTString.h)
    903 *****************************************************************************/
    904 
    905