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