17b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/****************************************************************************** 27b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 37b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @File PVRTString.cpp 47b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 57b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @Title PVRTString 67b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 77b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @Version 87b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 97b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @Copyright Copyright (c) Imagination Technologies Limited. 107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @Platform ANSI compatible 127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens @Description A string class that can be used as drop-in replacement for 147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens std::string on platforms/compilers that don't provide a full C++ 157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens standard library. 167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens******************************************************************************/ 187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#include "PVRTString.h" 197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#ifdef _USING_PVRTSTRING_ 217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#include <stdlib.h> 237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#include <string.h> 247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#include <stdarg.h> 257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#include "PVRTGlobal.h" 277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensconst size_t CPVRTString::npos = (size_t) -1; 297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#if defined(_WIN32) 317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#define vsnprintf _vsnprintf 327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#define snprintf _snprintf 337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif 347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function CPVRTString 377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Length of _Ptr 397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Constructor 407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 417b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString::CPVRTString(const char* _Ptr, size_t _Count) : 427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensm_pString(0), m_Capacity(0) 437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Count == npos) 457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Ptr == NULL) 477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens assign(_Ptr, 0); 497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens assign(_Ptr); 537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens assign(_Ptr, _Count); 577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function CPVRTString 617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Right A string 627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Roff Offset into _Right 637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of chars from _Right to assign to the new string 647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Constructor 657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 667b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString::CPVRTString(const CPVRTString& _Right, size_t _Roff, size_t _Count) : 677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensm_pString(0), m_Capacity(0) 687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens assign(_Right, _Roff, _Count); 707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function CPVRTString 747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Length of new string 757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char to fill it with 767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Constructor 777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 787b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString::CPVRTString(size_t _Count, char _Ch) : 797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensm_pString(0), m_Capacity(0) 807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens assign(_Count,_Ch); 827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function CPVRTString 867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Constructor 887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 897b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString::CPVRTString(const char _Ch) : 907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensm_pString(0), m_Capacity(0) 917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens assign( 1, _Ch); 937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function CPVRTString 977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Constructor 987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 997b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString::CPVRTString() : 1007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensm_Size(0), m_Capacity(1) 1017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 1027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString = (char*)calloc(1, 1); 1037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 1047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 1067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function ~CPVRTString 1077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Destructor 1087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 1097b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString::~CPVRTString() 1107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 1117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_pString) 1127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 1137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens free(m_pString); 1147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString=NULL; 1157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 1167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 1177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 1197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function append 1207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 1217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 1227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Appends a string 1237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 1247b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::append(const char* _Ptr) 1257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 1267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Ptr==NULL) 1277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 1287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 1297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 1307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return append(_Ptr,strlen(_Ptr)); 1317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 1327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 1347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function append 1357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 1367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count String length 1377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 1387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Appends a string of length _Count 1397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 1407b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::append(const char* _Ptr, size_t _Count) 1417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 1427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* pString = m_pString; 1437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t newCapacity = _Count + m_Size + 1; // +1 for null termination 1447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // extend CPVRTString if necessary 1467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_Capacity < newCapacity) 1477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 1487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens pString = (char*)malloc(newCapacity); 1497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Capacity = newCapacity; // Using low memory profile (but very slow append) 1507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens memmove(pString, m_pString, m_Size); 1517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens pString[m_Capacity-1]='\0'; 1527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 1537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // append chars from _Ptr 1557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens memmove(pString + m_Size, _Ptr, _Count); 1567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Size += _Count; 1577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens pString[m_Size] = 0; 1587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // remove old CPVRTString if necessary 1607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (pString != m_pString) 1617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 1627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_pString) 1637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 1647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens free(m_pString); 1657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString=NULL; 1667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 1677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString = pString; 1687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 1697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 1707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 1717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 1737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function append 1747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 1757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 1767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Appends a string 1777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 1787b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::append(const CPVRTString& _Str) 1797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 1807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return append(_Str.m_pString,_Str.m_Size); 1817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 1827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 1847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function append 1857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 1867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off A position in string 1877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of letters to append 1887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 1897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Appends _Count letters of _Str from _Off in _Str 1907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 1917b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::append(const CPVRTString& _Str, size_t _Off, size_t _Count) 1927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 1937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Str.length() < _Off + _Count) 1947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 1957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int i32NewCount = (signed)(_Str.length())-(signed)_Off; 1967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i32NewCount < 0 ) 1987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 1997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 2007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 2017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _Count = (size_t) i32NewCount; 2037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 2047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return append(_Str.m_pString+_Off,_Count); 2067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 2077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 2097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function append 2107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 2117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of times to append _Ch 2127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 2137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Appends _Ch _Count times 2147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 2157b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::append(size_t _Count, char _Ch) 2167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 2177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* pString = m_pString; 2187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t newCapacity = _Count + m_Size + 1; // +1 for null termination 2197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // extend CPVRTString if necessary 2207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_Capacity < newCapacity) 2217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 2227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens pString = (char*)malloc(newCapacity); 2237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Capacity = newCapacity; 2247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens memmove(pString, m_pString, m_Size+1); 2257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 2267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* newChar = &pString[m_Size]; 2287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // fill new space with _Ch 2297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=0;i<_Count;++i) 2307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 2317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens *newChar++ = _Ch; 2327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 2337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens *newChar = '\0'; // set null terminator 2347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Size+=_Count; // adjust length of string for new characters 2357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // remove old CPVRTString if necessary 2377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (pString != m_pString) 2387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 2397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_pString) 2407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 2417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens free(m_pString); 2427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString=NULL; 2437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 2447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString = pString; 2457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 2467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 2477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 2487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 2507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function assign 2517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 2527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 2537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Assigns the string to the string _Ptr 2547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 2557b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::assign(const char* _Ptr) 2567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 2577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Ptr == NULL) 2587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 2597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return assign(_Ptr, 0); 2607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 2617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return assign(_Ptr, strlen(_Ptr)); 2627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 2637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 2657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function assign 2667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 2677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Length of _Ptr 2687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 2697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Assigns the string to the string _Ptr 2707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 2717b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::assign(const char* _Ptr, size_t _Count) 2727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 2737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_Capacity <= _Count) 2747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 2757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens free(m_pString); 2767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Capacity = _Count+1; 2777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString = (char*)malloc(m_Capacity); 2787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens memcpy(m_pString, _Ptr, _Count); 2797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 2807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 2817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens memmove(m_pString, _Ptr, _Count); 2827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Size = _Count; 2847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString[m_Size] = 0; 2857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 2877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 2887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 2897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 2907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function assign 2917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 2927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 2937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Assigns the string to the string _Str 2947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 2957b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::assign(const CPVRTString& _Str) 2967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 2977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return assign(_Str.m_pString, _Str.m_Size); 2987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 2997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 3017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function assign 3027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 3037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off First char to start assignment from 3047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Length of _Str 3057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 3067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Assigns the string to _Count characters in string _Str starting at _Off 3077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 3087b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::assign(const CPVRTString& _Str, size_t _Off, size_t _Count) 3097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 3107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(_Count==npos) 3117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 3127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _Count = _Str.m_Size - _Off; 3137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 3147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return assign(&_Str.m_pString[_Off], _Count); 3157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 3167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 3187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function assign 3197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A string 3207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of times to repeat _Ch 3217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Updated string 3227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Assigns the string to _Count copies of _Ch 3237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 3247b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::assign(size_t _Count,char _Ch) 3257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 3267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_Capacity <= _Count) 3277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 3287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_pString) 3297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 3307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens free(m_pString); 3317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString=NULL; 3327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 3337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString = (char*)malloc(_Count + 1); 3347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Capacity = _Count+1; 3357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 3367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Size = _Count; 3377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens memset(m_pString, _Ch, _Count); 3387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString[m_Size] = 0; 3397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 3417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 3427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//const_reference at(size_t _Off) const; 3447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//reference at(size_t _Off); 3457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 3477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function c_str 3487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns const char* pointer of the string 3497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns a const char* pointer of the string 3507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 3517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensconst char* CPVRTString::c_str() const 3527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 3537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return m_pString; 3547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 3557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 3577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function capacity 3587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns The size of the character array reserved 3597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the size of the character array reserved 3607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 3617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::capacity() const 3627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 3637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return m_Capacity; 3647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 3657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 3677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function clear 3687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Clears the string 3697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 3707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensvoid CPVRTString::clear() 3717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 3727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_pString) 3737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 3747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens free(m_pString); 3757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString=NULL; 3767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 3777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString = (char*)calloc(1, 1); 3787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Size = 0; 3797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Capacity = 1; 3807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 3817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 3837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function compare 3847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string to compare with 3857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns 0 if the strings match 3867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Compares the string with _Str 3877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 3887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::compare(const CPVRTString& _Str) const 3897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 3907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strcmp(m_pString,_Str.m_pString); 3917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 3927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 3937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 3947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function < 3957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string to compare with 3967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns True on success 3977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Less than operator 3987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 3997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensbool CPVRTString::operator<(const CPVRTString & _Str) const 4007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 4017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return (strcmp(m_pString, _Str.m_pString) < 0); 4027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 4037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 4047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 4057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function compare 4067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Pos1 Position to start comparing from 4077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Num1 Number of chars to compare 4087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string to compare with 4097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns 0 if the strings match 4107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Compares the string with _Str 4117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 4127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::compare(size_t _Pos1, size_t _Num1, const CPVRTString& _Str) const 4137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 4147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _ASSERT(_Pos1<=m_Size); // check comparison starts within lhs CPVRTString 4157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 4167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int i32Ret; // value to return if no difference in actual comparisons between chars 4177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stLhsLength = m_Size-_Pos1; 4187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stSearchLength = PVRT_MIN(stLhsLength,PVRT_MIN(_Str.m_Size,_Num1)); // number of comparisons to do 4197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(PVRT_MIN(stLhsLength,_Num1)<PVRT_MIN(_Str.m_Size,_Num1)) 4207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 4217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = -1; 4227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 4237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else if(PVRT_MIN(stLhsLength,_Num1)>PVRT_MIN(_Str.m_Size,_Num1)) 4247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 4257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = 1; 4267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 4277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 4287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 4297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = 0; 4307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 4317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 4327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // do actual comparison 4337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char* lhptr = &m_pString[_Pos1]; 4347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char* rhptr = _Str.m_pString; 4357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=0;i<stSearchLength;++i) 4367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 4377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(*lhptr<*rhptr) 4387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return -1; 4397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else if (*lhptr>*rhptr) 4407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return 1; 4417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens lhptr++;rhptr++; 4427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 4437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // no difference found in compared characters 4447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i32Ret; 4457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 4467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 4477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 4487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function compare 4497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Pos1 Position to start comparing from 4507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Num1 Number of chars to compare 4517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string to compare with 4527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Position in _Str to compare from 4537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of chars in _Str to compare with 4547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns 0 if the strings match 4557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Compares the string with _Str 4567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 4577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::compare(size_t _Pos1, size_t _Num1, const CPVRTString& _Str, size_t /*_Off*/, size_t _Count) const 4587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 4597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _ASSERT(_Pos1<=m_Size); // check comparison starts within lhs CPVRTString 4607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 4617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int i32Ret; // value to return if no difference in actual comparisons between chars 4627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stLhsLength = m_Size-_Pos1; 4637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stSearchLength = PVRT_MIN(stLhsLength,PVRT_MIN(_Str.m_Size,PVRT_MIN(_Num1,_Count))); // number of comparisons to do 4647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(PVRT_MIN(stLhsLength,_Num1)<PVRT_MIN(_Str.m_Size,_Count)) 4657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 4667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = -1; 4677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 4687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else if(PVRT_MIN(stLhsLength,_Num1)>PVRT_MIN(_Str.m_Size,_Count)) 4697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 4707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = 1; 4717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 4727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 4737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 4747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = 0; 4757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 4767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 4777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 4787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // do actual comparison 4797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* lhptr = &m_pString[_Pos1]; 4807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* rhptr = _Str.m_pString; 4817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=0;i<stSearchLength;++i) 4827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 4837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(*lhptr<*rhptr) 4847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return -1; 4857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else if (*lhptr>*rhptr) 4867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return 1; 4877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens lhptr++;rhptr++; 4887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 4897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // no difference found in compared characters 4907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i32Ret; 4917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 4927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 4937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 4947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function compare 4957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string to compare with 4967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns 0 if the strings match 4977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Compares the string with _Ptr 4987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 4997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::compare(const char* _Ptr) const 5007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 5017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strcmp(m_pString,_Ptr); 5027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 5037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 5047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 5057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function compare 5067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Pos1 Position to start comparing from 5077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Num1 Number of chars to compare 5087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string to compare with 5097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns 0 if the strings match 5107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Compares the string with _Ptr 5117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 5127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::compare(size_t _Pos1, size_t _Num1, const char* _Ptr) const 5137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 5147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _ASSERT(_Pos1<=m_Size); // check comparison starts within lhs CPVRTString 5157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 5167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int i32Ret; // value to return if no difference in actual comparisons between chars 5177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stLhsLength = m_Size-_Pos1; 5187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stRhsLength = strlen(_Ptr); 5197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stSearchLength = PVRT_MIN(stLhsLength,PVRT_MIN(stRhsLength,_Num1)); // number of comparisons to do 5207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(PVRT_MIN(stLhsLength,_Num1)<PVRT_MIN(stRhsLength,_Num1)) 5217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 5227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = -1; 5237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 5247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else if(PVRT_MIN(stLhsLength,_Num1)>PVRT_MIN(stRhsLength,_Num1)) 5257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 5267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = 1; 5277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 5287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 5297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 5307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = 0; 5317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 5327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 5337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // do actual comparison 5347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char* lhptr = &m_pString[_Pos1]; 5357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char* rhptr = _Ptr; 5367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=0;i<stSearchLength;++i) 5377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 5387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(*lhptr<*rhptr) 5397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return -1; 5407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else if (*lhptr>*rhptr) 5417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return 1; 5427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens lhptr++;rhptr++; 5437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 5447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // no difference found in compared characters 5457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i32Ret; 5467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 5477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 5487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 5497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function compare 5507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Pos1 Position to start comparing from 5517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Num1 Number of chars to compare 5527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string to compare with 5537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of char to compare 5547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns 0 if the strings match 5557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Compares the string with _Str 5567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 5577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::compare(size_t _Pos1, size_t _Num1, const char* _Ptr, size_t _Count) const 5587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 5597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _ASSERT(_Pos1<=m_Size); // check comparison starts within lhs CPVRTString 5607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 5617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int i32Ret; // value to return if no difference in actual comparisons between chars 5627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stLhsLength = m_Size-_Pos1; 5637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stRhsLength = strlen(_Ptr); 5647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t stSearchLength = PVRT_MIN(stLhsLength,PVRT_MIN(stRhsLength,PVRT_MIN(_Num1,_Count))); // number of comparisons to do 5657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(PVRT_MIN(stLhsLength,_Num1)<PVRT_MIN(stRhsLength,_Count)) 5667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 5677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = -1; 5687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 5697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else if(PVRT_MIN(stLhsLength,_Num1)>PVRT_MIN(stRhsLength,_Count)) 5707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 5717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = 1; 5727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 5737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 5747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 5757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32Ret = 0; 5767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 5777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 5787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 5797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // do actual comparison 5807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* lhptr = &m_pString[_Pos1]; 5817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens const char* rhptr = _Ptr; 5827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=0;i<stSearchLength;++i) 5837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 5847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(*lhptr<*rhptr) 5857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return -1; 5867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else if (*lhptr>*rhptr) 5877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return 1; 5887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens lhptr++;rhptr++; 5897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 5907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // no difference found in compared characters 5917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i32Ret; 5927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 5937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 5947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 5957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function == 5967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string to compare with 5977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns True if they match 5987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description == Operator 5997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 6007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensbool CPVRTString::operator==(const CPVRTString& _Str) const 6017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 6027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strcmp(m_pString, _Str.m_pString)==0; 6037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 6047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 6067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function == 6077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string to compare with 6087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns True if they match 6097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description == Operator 6107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 6117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensbool CPVRTString::operator==(const char* const _Ptr) const 6127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 6137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!_Ptr) 6147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return false; 6157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strcmp(m_pString, _Ptr)==0; 6177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 6187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 6207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function != 6217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string to compare with 6227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns True if they don't match 6237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description != Operator 6247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 6257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensbool CPVRTString::operator!=(const CPVRTString& _Str) const 6267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 6277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strcmp(m_pString, _Str.m_pString)!=0; 6287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 6297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 6317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function != 6327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string to compare with 6337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns True if they don't match 6347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description != Operator 6357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 6367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensbool CPVRTString::operator!=(const char* const _Ptr) const 6377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 6387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!_Ptr) 6397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return true; 6407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strcmp(m_pString, _Ptr)!=0; 6427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 6437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 6457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function copy 6467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Modified _Ptr A string to copy to 6477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Size of _Ptr 6487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Position to start copying from 6497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Number of bytes copied 6507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Copies the string to _Ptr 6517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 6527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::copy(char* _Ptr, size_t _Count, size_t _Off) const 6537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 6547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(memcpy(_Ptr, &m_pString[_Off], PVRT_MIN(_Count, m_Size - _Off))) 6557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return _Count; 6567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return 0; 6587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 6597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 6617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function data 6627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns A const char* version of the string 6637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns a const char* version of the string 6647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 6657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensconst char* CPVRTString::data() const 6667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 6677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return m_pString; 6687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 6697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 6717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function empty 6727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns True if the string is empty 6737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns true if the string is empty 6747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 6757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensbool CPVRTString::empty() const 6767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 6777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return (m_Size == 0); 6787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 6797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 6807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 6817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function erase 6827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Pos The position to start erasing from 6837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of chars to erase 6847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 6857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Erases a portion of the string 6867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 6877b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::erase(size_t _Pos, size_t _Count) 6887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 6897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Count == npos || _Pos + _Count >= m_Size) 6907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 6917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens resize(_Pos, 0); 6927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 6937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 6947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 6957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens memmove(&m_pString[_Pos], &m_pString[_Pos + _Count], m_Size + 1 - (_Pos + _Count)); 6967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 6977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 6987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 6997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 7007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 7017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find 7027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr String to search. 7037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Offset to search from. 7047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of characters in this string. 7057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first matched string. 7067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Finds a substring within this string. 7077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 7087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find(const char* _Ptr, size_t _Off, size_t _Count) const 7097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 7107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!_Ptr) 7117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 7127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 7137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(_Count > m_Size) 7147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 7157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 7167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens while(_Off < m_Size) 7177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 7187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(_Ptr[0] == m_pString[_Off]) 7197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 7207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(compare(_Off, _Count, _Ptr) == 0) 7217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return _Off; 7227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 7237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _Off++; 7247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 7257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 7267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 7277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 7287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 7297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 7307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find 7317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str String to search. 7327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Offset to search from. 7337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first matched string. 7347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Erases a portion of the string 7357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 7367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find(const CPVRTString& _Str, size_t _Off) const 7377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 7387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return find(_Str.c_str(), _Off, _Str.length()); 7397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 7407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 7417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 7427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_not_of 7437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 7447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 7457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that is not _Ch 7467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that is not _Ch 7477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 7487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_not_of(char _Ch, size_t _Off) const 7497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 7507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 7517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 7527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]!=_Ch) 7537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 7547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 7557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 7567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 7577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 7587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 7597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_not_of 7607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 7617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 7627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that is not in _Ptr 7637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that is not in _Ptr 7647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 7657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_not_of(const char* _Ptr, size_t _Off) const 7667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 7677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 7687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 7697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bFound = false; 7707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 7717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;_Ptr[j]!=0;++j) 7727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 7737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bFound = bFound || (m_pString[i]==_Ptr[j]); 7747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 7757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bFound) 7767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { // return if no match 7777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 7787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 7797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 7807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 7817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 7827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 7837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 7847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_not_of 7857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 7867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 7877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Number of chars in _Ptr 7887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that is not in _Ptr 7897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that is not in _Ptr 7907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 7917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_not_of(const char* _Ptr, size_t _Off, size_t _Count) const 7927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 7937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 7947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 7957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bFound = false; 7967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 7977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Count;++j) 7987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 7997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bFound = bFound || (m_pString[i]==_Ptr[j]); 8007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bFound) 8027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { // return if no match 8037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 8047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 8077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 8087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 8097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 8107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_not_of 8117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 8127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 8137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that is not in _Str 8147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that is not in _Str 8157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 8167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_not_of(const CPVRTString& _Str, size_t _Off) const 8177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 8187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 8197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 8207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bFound = false; 8217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Str 8227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Str.m_Size;++j) 8237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 8247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bFound = bFound || (m_pString[i]==_Str[j]); 8257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bFound) 8277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { // return if no match 8287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 8297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 8327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 8337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 8347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 8357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_of 8367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 8377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 8387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that is _Ch 8397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that is _Ch 8407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 8417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_of(char _Ch, size_t _Off) const 8427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 8437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 8447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 8457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Ch) 8467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 8477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 8497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 8507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 8517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 8527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_of 8537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 8547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 8557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that matches a char in _Ptr 8567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that matches a char in _Ptr 8577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 8587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_of(const char* _Ptr, size_t _Off) const 8597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 8607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 8617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 8627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 8637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;_Ptr[j]!=0;++j) 8647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 8657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Ptr[j]) 8667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 8677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 8707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 8717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 8727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 8737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_of 8747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 8757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 8767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Size of _Ptr 8777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that matches a char in _Ptr 8787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that matches a char in _Ptr 8797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 8807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_of(const char* _Ptr, size_t _Off, size_t _Count) const 8817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 8827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 8837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 8847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 8857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Count;++j) 8867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 8877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Ptr[j]) 8887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 8897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 8917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 8927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 8937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 8947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 8957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 8967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_of 8977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 8987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 8997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Size of _Ptr 9007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that matches a char in _Ptr 9017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that matches a char in _Ptr 9027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 9037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_ofn(const char* _Ptr, size_t _Off, size_t _Count) const 9047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 9057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Ptr == NULL) 9067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 9087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 9107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (strlen(m_pString) < _Count) 9117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 9137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 9157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 9167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (m_pString[i] ==_Ptr[0]) 9187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (i+_Count-1>=m_Size) // There are not enough caracters in current String 9207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 9227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 9247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool compare = true; 9257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t k=1;k<_Count;++k) 9267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens compare &= (m_pString[i+k] ==_Ptr[k]); 9287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (compare == true) 9307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 9327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 9367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 9377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 9387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 9397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_first_of 9407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 9417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 9427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the first char that matches a char in _Str 9437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the first char that matches a char in _Str 9447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 9457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_first_of(const CPVRTString& _Str, size_t _Off) const 9467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 9477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 9487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 9507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Str.m_Size;++j) 9517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Str[j]) 9537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 9547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 9577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 9587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 9597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 9607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_last_not_of 9617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 9627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 9637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the last char that is not _Ch 9647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the last char that is not _Ch 9657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 9667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_last_not_of(char _Ch, size_t _Off) const 9677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 9687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=m_Size-_Off-1;i<m_Size;--i) 9697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]!=_Ch) 9717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 9737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 9767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 9777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 9787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 9797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_last_not_of 9807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 9817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 9827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the last char that is not in _Ptr 9837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the last char that is not in _Ptr 9847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 9857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_last_not_of(const char* _Ptr, size_t _Off) const 9867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 9877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=m_Size-_Off-1;i<m_Size;--i) 9887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bFound = true; 9907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 9917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;_Ptr[j]!=0;++j) 9927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 9937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bFound = bFound && (m_pString[i]!=_Ptr[j]); 9947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bFound) 9967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { // return if considered character differed from all characters from _Ptr 9977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 9987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 9997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 10017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 10027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 10037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 10047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_last_not_of 10057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 10067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 10077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Length of _Ptr 10087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the last char that is not in _Ptr 10097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the last char that is not in _Ptr 10107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 10117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_last_not_of(const char* _Ptr, size_t _Off, size_t _Count) const 10127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 10137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=m_Size-_Off-1;i<m_Size;--i) 10147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bFound = true; 10167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 10177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Count;++j) 10187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bFound = bFound && (m_pString[i]!=_Ptr[j]); 10207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bFound) 10227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // return if considered character differed from all characters from _Ptr 10247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 10257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 10287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 10297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 10307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 10317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_last_not_of 10327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 10337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 10347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the last char that is not in _Str 10357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the last char that is not in _Str 10367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 10377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_last_not_of(const CPVRTString& _Str, size_t _Off) const 10387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 10397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=m_Size-_Off-1;i<m_Size;--i) 10407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bFound = true; 10427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 10437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Str.m_Size;++j) 10447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bFound = bFound && (m_pString[i]!=_Str[j]); 10467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bFound) 10487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // return if considered character differed from all characters from _Ptr 10507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 10517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 10547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 10557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 10567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 10577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_last_of 10587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 10597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 10607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the last char that is _Ch 10617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the last char that is _Ch 10627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 10637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_last_of(char _Ch, size_t _Off) const 10647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 10657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=m_Size-_Off-1;i<m_Size;--i) 10667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Ch) 10687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 10707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 10737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 10747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 10757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 10767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_last_of 10777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 10787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 10797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the last char that is in _Ptr 10807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the last char that is in _Ptr 10817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 10827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_last_of(const char* _Ptr, size_t _Off) const 10837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 10847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=m_Size-_Off-1;i<m_Size;--i) 10857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 10877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;_Ptr[j]!=0;++j) 10887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 10897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Ptr[j]) 10907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 10917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 10937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 10947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 10957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 10967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 10977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_last_of 10987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 10997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 11007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Length of _Ptr 11017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the last char that is in _Ptr 11027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the last char that is in _Ptr 11037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 11047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_last_of(const char* _Ptr, size_t _Off, size_t _Count) const 11057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 11067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=m_Size-_Off-1;i<m_Size;--i) 11077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 11097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Count;++j) 11107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]!=_Ptr[j]) 11127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 11137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 11147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 11157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 11167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 11177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 11187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 11197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_last_of 11207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 11217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 11227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Position of the last char that is in _Str 11237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the position of the last char that is in _Str 11247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 11257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_last_of(const CPVRTString& _Str, size_t _Off) const 11267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 11277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=m_Size-_Off-1;i<m_Size;--i) 11287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Str 11307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Str.m_Size;++j) 11317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]!=_Str[j]) 11337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return i; 11347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 11357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 11367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return npos; 11377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 11387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 11397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 11407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_number_of 11417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 11427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 11437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Number of occurances of _Ch in the parent string. 11447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the number of occurances of _Ch in the parent string. 11457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 11467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_number_of(char _Ch, size_t _Off) const 11477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 11487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t occurances=0; 11497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 11507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Ch) 11527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens occurances++; 11537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 11547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return occurances; 11557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 11567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 11577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 11587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_number_of 11597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 11607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 11617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Number of occurances of _Ptr in the parent string. 11627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the number of occurances of _Ptr in the parent string. 11637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 11647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_number_of(const char* _Ptr, size_t _Off) const 11657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 11667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t occurances=0; 11677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bNotHere=false; 11687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 11697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 11717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;_Ptr[j]!=0;++j) 11727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Ptr[j]) bNotHere=true; 11747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bNotHere) break; 11757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 11767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bNotHere) occurances++; 11777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else bNotHere = false; 11787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 11797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return occurances; 11807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 11817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 11827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 11837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_number_of 11847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 11857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 11867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Size of _Ptr 11877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Number of occurances of _Ptr in the parent string. 11887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the number of occurances of _Ptr in the parent string. 11897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 11907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_number_of(const char* _Ptr, size_t _Off, size_t _Count) const 11917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 11927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t occurances=0; 11937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bNotHere=false; 11947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 11957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 11977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Count;++j) 11987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 11997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Ptr[j]) bNotHere=true; 12007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bNotHere) break; 12017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 12027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bNotHere) occurances++; 12037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else bNotHere = false; 12047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 12057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return occurances; 12067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 12077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 12087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 12097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_number_of 12107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 12117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 12127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Number of occurances of _Str in the parent string. 12137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the number of occurances of _Str in the parent string. 12147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 12157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::find_number_of(const CPVRTString& _Str, size_t _Off) const 12167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 12177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t occurances=0; 12187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bNotHere=false; 12197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 12207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 12217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 12227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Str.m_Size;++j) 12237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 12247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Str[j]) 12257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bNotHere=true; 12267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bNotHere) 12277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens break; 12287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 12297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bNotHere) occurances++; 12307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else bNotHere = false; 12317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 12327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return occurances; 12337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 12347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 12357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 12367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_next_occurance_of 12377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 12387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 12397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Next occurance of _Ch in the parent string. 12407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the next occurance of _Ch in the parent string 12417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens after or at _Off. If not found, returns the length of the string. 12427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 12437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::find_next_occurance_of(char _Ch, size_t _Off) const 12447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 12457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 12467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 12477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Ch) 12487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return (int)i; 12497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 12507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return (int)m_Size; 12517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 12527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 12537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 12547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_next_occurance_of 12557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 12567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 12577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Next occurance of _Ptr in the parent string. 12587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the next occurance of _Ptr in the parent string 12597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens after or at _Off. If not found, returns the length of the string. 12607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 12617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::find_next_occurance_of(const char* _Ptr, size_t _Off) const 12627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 12637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bHere=true; 12647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 12657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 12667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 12677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;_Ptr[j]!=0;++j) 12687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 12697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Ptr[j]) bHere=false; 12707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bHere) break; 12717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 12727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bHere) return (int)i; 12737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bHere=true; 12747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 12757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return (int)m_Size; 12767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 12777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 12787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 12797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_next_occurance_of 12807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 12817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 12827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Size of _Ptr 12837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Next occurance of _Ptr in the parent string. 12847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the next occurance of _Ptr in the parent string 12857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens after or at _Off. If not found, returns the length of the string. 12867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 12877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::find_next_occurance_of(const char* _Ptr, size_t _Off, size_t _Count) const 12887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 12897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bHere=true; 12907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 12917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 12927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 12937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Count;++j) 12947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 12957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Ptr[j]) bHere=false; 12967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bHere) break; 12977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 12987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bHere) return (int)i; 12997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bHere=true; 13007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 13017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return (int)m_Size; 13027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 13037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 13047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 13057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_next_occurance_of 13067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 13077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 13087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Next occurance of _Str in the parent string. 13097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the next occurance of _Str in the parent string 13107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens after or at _Off. If not found, returns the length of the string. 13117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 13127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::find_next_occurance_of(const CPVRTString& _Str, size_t _Off) const 13137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 13147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bHere=true; 13157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i<m_Size;++i) 13167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 13177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Str 13187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Str.m_Size;++j) 13197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 13207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Str[j]) bHere=false; 13217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bHere) break; 13227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 13237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bHere) return (int)i; 13247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bHere=true; 13257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 13267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return (int)m_Size; 13277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 13287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 13297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 13307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_previous_occurance_of 13317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 13327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 13337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Previous occurance of _Ch in the parent string. 13347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the previous occurance of _Ch in the parent string 13357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens before _Off. If not found, returns -1. 13367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 13377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::find_previous_occurance_of(char _Ch, size_t _Off) const 13387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 13397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i>0;--i) 13407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 13417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==_Ch) 13427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return (int)i; 13437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 13447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return -1; 13457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 13467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 13477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 13487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_previous_occurance_of 13497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 13507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 13517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Previous occurance of _Ptr in the parent string. 13527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the previous occurance of _Ptr in the parent string 13537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens before _Off. If not found, returns -1. 13547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 13557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::find_previous_occurance_of(const char* _Ptr, size_t _Off) const 13567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 13577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bHere=true; 13587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i>0;--i) 13597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 13607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 13617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;_Ptr[j]!=0;++j) 13627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 13637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Ptr[j]) bHere=false; 13647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bHere) break; 13657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 13667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bHere) return (int)i; 13677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bHere=true; 13687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 13697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return -1; 13707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 13717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 13727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 13737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_previous_occurance_of 13747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 13757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 13767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Size of _Ptr 13777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Previous occurance of _Ptr in the parent string. 13787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the previous occurance of _Ptr in the parent string 13797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens before _Off. If not found, returns -1. 13807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 13817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::find_previous_occurance_of(const char* _Ptr, size_t _Off, size_t _Count) const 13827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 13837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bHere=true; 13847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i>0;--i) 13857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 13867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Ptr 13877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Count;++j) 13887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 13897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Ptr[j]) bHere=false; 13907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bHere) break; 13917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 13927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bHere) return (int)i; 13937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bHere=true; 13947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 13957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return -1; 13967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 13977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 13987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 13997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function find_previous_occurance_of 14007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string 14017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start position of the find 14027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Previous occurance of _Str in the parent string. 14037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the previous occurance of _Str in the parent string 14047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens before _Off. If not found, returns -1. 14057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 14067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensint CPVRTString::find_previous_occurance_of(const CPVRTString& _Str, size_t _Off) const 14077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 14087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bool bHere=true; 14097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t i=_Off;i>0;--i) 14107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 14117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens // compare against each char from _Str 14127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens for(size_t j=0;j<_Str.m_Size;++j) 14137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 14147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i+j>m_Size || m_pString[i+j]!=_Str[j]) bHere=false; 14157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!bHere) break; 14167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 14177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(bHere) return (int)i; 14187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens bHere=true; 14197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 14207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return -1; 14217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 14227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 14247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function left 14257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input iSize number of characters to return (excluding null character) 14267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns The leftmost 'iSize' characters of the string. 14277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the leftmost characters of the string (excluding 14287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens the null character) in a new CPVRTString. If iSize is 14297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens larger than the string, a copy of the original string is returned. 14307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 14317b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString CPVRTString::left(size_t iSize) const 14327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 14337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(iSize>=m_Size) return *this; 14347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(m_pString,iSize); 14357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 14367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 14387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function right 14397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input iSize number of characters to return (excluding null character) 14407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns The rightmost 'iSize' characters of the string. 14417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the rightmost characters of the string (excluding 14427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens the null character) in a new CPVRTString. If iSize is 14437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens larger than the string, a copy of the original string is returned. 14447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 14457b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString CPVRTString::right(size_t iSize) const 14467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 14477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(iSize>=m_Size) return *this; 14487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(m_pString+(m_Size-iSize),iSize); 14497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 14507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& CPVRTString::insert(size_t _P0, const char* _Ptr) 14527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//{ 14537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens// return replace(_P0, 0, _Ptr); 14547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//} 14557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& CPVRTString::insert(size_t _P0, const char* _Ptr, size_t _Count) 14577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//{ 14587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens// return replace(_P0, 0, _Ptr, _Count); 14597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//} 14607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& CPVRTString::insert(size_t _P0, const CPVRTString& _Str) 14627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//{ 14637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens// return replace(_P0, 0, _Str); 14647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//} 14657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& CPVRTString::insert(size_t _P0, const CPVRTString& _Str, size_t _Off, size_t _Count) 14677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//{ 14687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens// return replace(_P0, 0, _Str, _Off, _Count); 14697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//} 14707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& CPVRTString::insert(size_t _P0, size_t _Count, char _Ch) 14727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//{ 14737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens// return replace(_P0, 0, _Count, _Ch); 14747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//} 14757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 14777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function length 14787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Length of the string 14797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the length of the string 14807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 14817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::length() const 14827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 14837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return m_Size; 14847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 14857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 14877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function max_size 14887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns The maximum number of chars that the string can contain 14897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the maximum number of chars that the string can contain 14907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 14917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::max_size() const 14927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 14937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return 0x7FFFFFFF; 14947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 14957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 14967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 14977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function push_back 14987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char to append 14997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Appends _Ch to the string 15007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 15017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensvoid CPVRTString::push_back(char _Ch) 15027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 15037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens append(1, _Ch); 15047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 15057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 15067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& replace(size_t _Pos1, size_t _Num1, const char* _Ptr) 15077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& replace(size_t _Pos1, size_t _Num1, const CPVRTString& _Str) 15087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& replace(size_t _Pos1, size_t _Num1, const char* _Ptr, size_t _Num2) 15097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& replace(size_t _Pos1, size_t _Num1, const CPVRTString& _Str, size_t _Pos2, size_t _Num2) 15107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//CPVRTString& replace(size_t _Pos1, size_t _Num1, size_t _Count, char _Ch) 15117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 15127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 15137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function reserve 15147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Size of string to reserve 15157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Reserves space for _Count number of chars 15167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 15177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensvoid CPVRTString::reserve(size_t _Count) 15187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 15197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Count >= m_Capacity) 15207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 15217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString = (char*)realloc(m_pString, _Count + 1); 15227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Capacity = _Count + 1; 15237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 15247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 15257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 15267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 15277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function resize 15287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Size of string to resize to 15297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch Character to use to fill any additional space 15307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Resizes the string to _Count in length 15317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 15327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensvoid CPVRTString::resize(size_t _Count, char _Ch) 15337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 15347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (_Count <= m_Size) 15357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 15367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Size = _Count; 15377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString[m_Size] = 0; 15387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 15397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 15407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 15417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens append(_Count - m_Size,_Ch); 15427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 15437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 15447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 15457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//size_t rfind(char _Ch, size_t _Off = npos) const; 15467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//size_t rfind(const char* _Ptr, size_t _Off = npos) const; 15477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//size_t rfind(const char* _Ptr, size_t _Off = npos, size_t _Count) const; 15487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens//size_t rfind(const CPVRTString& _Str, size_t _Off = npos) const; 15497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 15507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 15517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function size 15527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Size of the string 15537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the size of the string 15547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 15557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capenssize_t CPVRTString::size() const 15567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 15577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return m_Size; 15587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 15597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 15607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 15617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function substr 15627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off Start of the substring 15637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Count Length of the substring 15647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns A substring of the string 15657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Returns the size of the string 15667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 15677b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString CPVRTString::substr(size_t _Off, size_t _Count) const 15687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 15697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(*this, _Off, _Count); 15707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 15717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 15727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 15737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function swap 15747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Str A string to swap with 15757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Swaps the contents of the string with _Str 15767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 15777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capensvoid CPVRTString::swap(CPVRTString& _Str) 15787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 15797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t Size = _Str.m_Size; 15807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t Capacity = _Str.m_Capacity; 15817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* pString = _Str.m_pString; 15827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _Str.m_Size = m_Size; 15837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _Str.m_Capacity = m_Capacity; 15847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens _Str.m_pString = m_pString; 15857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Size = Size; 15867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_Capacity = Capacity; 15877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString = pString; 15887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 15897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 15907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 15917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function toLower 15927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 15937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Converts the string to lower case 15947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 15957b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::toLower() 15967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 15977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int i = 0; 15987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens while ( (m_pString[i] = (m_pString[i]>='A'&&m_pString[i]<='Z') ? ('a'+m_pString[i])-'A': m_pString[i]) != 0) i++; 15997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 16007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 16017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 16037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function toUpper 16047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 16057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Converts the string to upper case 16067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 16077b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::toUpper() 16087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 16097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int i = 0; 16107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens while ( (m_pString[i] = (m_pString[i]>='a'&&m_pString[i]<='z') ? ('A'+m_pString[i])-'a': m_pString[i]) != 0) i++; 16117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 16127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 16137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 16157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function Format 16167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input pFormat A string containing the formating 16177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns A formatted string 16187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description return the formatted string 16197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 16207b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString CPVRTString::format(const char *pFormat, ...) 16217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 16227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_list arg; 16237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_start(arg, pFormat); 16257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#if defined(_WIN32) 16267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t bufSize = _vscprintf(pFormat,arg); 16277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#else 16287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t bufSize = vsnprintf(NULL,0,pFormat,arg); 16297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif 16307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_end(arg); 16317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* buf=new char[bufSize + 1]; 16337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_start(arg, pFormat); 16357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens vsnprintf(buf, bufSize + 1, pFormat, arg); 16367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_end(arg); 16377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString returnString(buf); 16397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens delete [] buf; 16407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens *this = returnString; 16417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return returnString; 16427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 16437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 16457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function += 16467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 16477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 16487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description += Operator 16497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 16507b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::operator+=(char _Ch) 16517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 16527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return append(1, _Ch); 16537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 16547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 16567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function += 16577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 16587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 16597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description += Operator 16607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 16617b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::operator+=(const char* _Ptr) 16627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 16637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return append(_Ptr); 16647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 16657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 16677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function += 16687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Right A string 16697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 16707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description += Operator 16717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 16727b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::operator+=(const CPVRTString& _Right) 16737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 16747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return append(_Right); 16757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 16767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 16787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function = 16797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ch A char 16807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 16817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description = Operator 16827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 16837b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::operator=(char _Ch) 16847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 16857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return assign(1, _Ch); 16867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 16877b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 16897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function = 16907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Ptr A string 16917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 16927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description = Operator 16937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 16947b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::operator=(const char* _Ptr) 16957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 16967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return assign(_Ptr); 16977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 16987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 16997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function = 17017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Right A string 17027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 17037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description = Operator 17047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17057b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::operator=(const CPVRTString& _Right) 17067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 17077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return assign(_Right); 17087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 17097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 17107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function [] 17127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off An index into the string 17137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns A character 17147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description [] Operator 17157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17167b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString::const_reference CPVRTString::operator[](size_t _Off) const 17177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 17187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return m_pString[_Off]; 17197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 17207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 17217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function [] 17237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Off An index into the string 17247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns A character 17257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description [] Operator 17267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17277b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString::reference CPVRTString::operator[](size_t _Off) 17287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 17297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return m_pString[_Off]; 17307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 17317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 17327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function + 17347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Left A string 17357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Right A string 17367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 17377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description + Operator 17387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17397b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString operator+ (const CPVRTString& _Left, const CPVRTString& _Right) 17407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 17417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(_Left).append(_Right); 17427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 17437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 17447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function + 17467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Left A string 17477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Right A string 17487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 17497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description + Operator 17507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17517b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString operator+ (const CPVRTString& _Left, const char* _Right) 17527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 17537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(_Left).append(_Right); 17547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 17557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 17567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function + 17587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Left A string 17597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Right A string 17607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 17617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description + Operator 17627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17637b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString operator+ (const CPVRTString& _Left, const char _Right) 17647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 17657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(_Left).append(_Right); 17667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 17677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 17687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function + 17707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Left A string 17717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Right A string 17727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 17737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description + Operator 17747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17757b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString operator+ (const char* _Left, const CPVRTString& _Right) 17767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 17777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(_Left).append(_Right); 17787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 17797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 17807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function + 17827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Left A string 17837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input _Right A string 17847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns An updated string 17857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description + Operator 17867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17877b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString operator+ (const char _Left, const CPVRTString& _Right) 17887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 17897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(_Left).append(_Right); 17907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 17917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 17927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/************************************************************************* 17937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens* MISCELLANEOUS UTILITY FUNCTIONS 17947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*************************************************************************/ 17957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 17967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function PVRTStringGetFileExtension 17977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input strFilePath A string 17987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Extension 17997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Extracts the file extension from a file path. 18007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens Returns an empty CPVRTString if no extension is found. 18017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 18027b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString PVRTStringGetFileExtension(const CPVRTString& strFilePath) 18037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 18047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString::size_type idx = strFilePath.find_last_of ( '.' ); 18057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (idx == CPVRTString::npos) 18077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(""); 18087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens else 18097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strFilePath.substr(idx); 18107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 18117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 18137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function PVRTStringGetContainingDirectoryPath 18147b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input strFilePath A string 18157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Directory 18167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Extracts the directory portion from a file path. 18177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 18187b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString PVRTStringGetContainingDirectoryPath(const CPVRTString& strFilePath) 18197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 18207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t i32sep = strFilePath.find_last_of('/'); 18217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i32sep == strFilePath.npos) 18227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 18237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32sep = strFilePath.find_last_of('\\'); 18247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i32sep == strFilePath.npos) 18257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { // can't find an actual \ or /, so return an empty string 18267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return CPVRTString(""); 18277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 18287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 18297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strFilePath.substr(0,i32sep); 18307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 18317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 18337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function PVRTStringGetFileName 18347b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input strFilePath A string 18357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns FileName 18367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Extracts the name and extension portion from a file path. 18377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 18387b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString PVRTStringGetFileName(const CPVRTString& strFilePath) 18397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 18407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t i32sep = strFilePath.find_last_of('/'); 18417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i32sep == strFilePath.npos) 18427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 18437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i32sep = strFilePath.find_last_of('\\'); 18447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(i32sep == strFilePath.npos) 18457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { // can't find an actual \ or / so leave it be 18467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strFilePath; 18477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 18487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 18497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strFilePath.substr(i32sep+1,strFilePath.length()); 18507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 18517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 18537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function PVRTStringStripWhiteSpaceFromStartOf 18547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input strLine A string 18557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Result of the white space stripping 18567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description strips white space characters from the beginning of a CPVRTString. 18577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 18587b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString PVRTStringStripWhiteSpaceFromStartOf(const CPVRTString& strLine) 18597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 18607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t start = strLine.find_first_not_of(" \t \n\r"); 18617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(start!=strLine.npos) 18627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strLine.substr(start,strLine.length()-(start)); 18637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strLine; 18647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 18657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 18687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function PVRTStringStripWhiteSpaceFromEndOf 18697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input strLine A string 18707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns Result of the white space stripping 18717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description strips white space characters from the end of a CPVRTString. 18727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 18737b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString PVRTStringStripWhiteSpaceFromEndOf(const CPVRTString& strLine) 18747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 18757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t end = strLine.find_last_not_of(" \t \n\r"); 18767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(end!=strLine.npos) 18777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strLine.substr(0,end+1); 18787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return strLine; 18797b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 18807b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18817b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/*!*********************************************************************** 18827b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Function PVRTStringFromFormattedStr 18837b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Input pFormat A string containing the formating 18847b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Returns A formatted string 18857b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens@Description Creates a formatted string 18867b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens************************************************************************/ 18877b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString PVRTStringFromFormattedStr(const char *pFormat, ...) 18887b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 18897b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_list arg; 18907b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18917b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_start(arg, pFormat); 18927b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#if defined(_WIN32) 18937b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t bufSize = _vscprintf(pFormat,arg); 18947b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#else 18957b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens size_t bufSize = vsnprintf(NULL,0,pFormat,arg); 18967b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif 18977b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_end(arg); 18987b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 18997b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char* buf = new char[bufSize + 1]; 19007b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19017b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_start(arg, pFormat); 19027b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens vsnprintf(buf, bufSize + 1, pFormat, arg); 19037b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens va_end(arg); 19047b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19057b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString returnString(buf); 19067b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens delete [] buf; 19077b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return returnString; 19087b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 19097b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19107b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens///*!*************************************************************************** 19117b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19127b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19137b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens// Substitute one character by another 19147b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::substitute(char _src,char _subDes, bool _all) 19157b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 19167b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int len = (int) length(); 19177b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char c=_src; 19187b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens char s=_subDes; 19197b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens int i=0; 19207b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens while(i<len) 19217b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 19227b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(m_pString[i]==c) 19237b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 19247b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens m_pString[i]=s; 19257b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!_all) break; 19267b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 19277b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens i++; 19287b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 19297b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 19307b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 19317b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19327b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19337b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens// Substitute one string by another ( Need time to improved ) 19347b21f276fa91ad62fd2055844688b07829f12205Nicolas CapensCPVRTString& CPVRTString::substitute(const char* _src, const char* _dest, bool _all) 19357b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens{ 19367b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if (this->length() == 0) 19377b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 19387b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 19397b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 19407b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens unsigned int pos=0; 19417b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString src = _src; 19427b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString dest = _dest; 19437b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString ori; 19447b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19457b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens while(pos<=m_Size-src.length()) 19467b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 19477b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(this->compare(pos,src.length(),_src)==0) 19487b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 19497b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens ori = this->c_str(); 19507b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens CPVRTString sub1, sub2, result; 19517b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens sub1.assign(ori,0,pos); 19527b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens sub2.assign(ori,pos+src.length(),m_Size - (pos+src.length())); 19537b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19547b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens this->assign(""); 19557b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens this->append(sub1); 19567b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens this->append(dest); 19577b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens this->append(sub2); 19587b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19597b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens if(!_all) 19607b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens { 19617b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens break; 19627b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 19637b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens pos += (unsigned int) dest.length(); 19647b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens continue; 19657b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 19667b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens pos++; 19677b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens } 19687b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19697b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens return *this; 19707b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens} 19717b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19727b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19737b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens#endif // _USING_PVRTSTRING_ 19747b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 19757b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens/***************************************************************************** 19767b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens End of file (PVRTString.cpp) 19777b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens*****************************************************************************/ 19787b21f276fa91ad62fd2055844688b07829f12205Nicolas Capens 1979