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)
22class __declspec(dllexport) CPVRTString
23#elif defined(_WINDLL_IMPORT)
24class __declspec(dllimport) CPVRTString
25#else
26class CPVRTString
27#endif
28{
29
30private:
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
41public:
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
840protected:
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************************************************************************/
856CPVRTString 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************************************************************************/
864CPVRTString 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************************************************************************/
872CPVRTString 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************************************************************************/
880CPVRTString 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************************************************************************/
888CPVRTString 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************************************************************************/
896CPVRTString PVRTStringFromFormattedStr(const char *pFormat, ...);
897
898#endif // _PVRTSTRING_H_
899
900
901/*****************************************************************************
902End of file (PVRTString.h)
903*****************************************************************************/
904
905