TString.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /*
  2. * Copyright (c) 2010 Nokia Corporation.
  3. */
  4. #include "TString.h"
  5. #include <string.h>
  6. TSDWORD strBegin( const TSBYTE* str, const TSBYTE* match ) {
  7. if( str == 0 ) return( -1 );
  8. TSDWORD rval = 0;
  9. while( *str != 0 && *match != 0 ) {
  10. if( *str != *match ) return -1;
  11. match++;
  12. str++;
  13. rval++;
  14. }
  15. return( rval );
  16. }
  17. TSDWORD cmpString( const TSBYTE *s1, const TSBYTE *s2 ) {
  18. TSBYTE c1,c2;
  19. while (*s1!=0 && *s2!=0) {
  20. c1 = *s1; c2 = *s2;
  21. if (c1>='A' && c1<='Z') c1 = c1-'A'+'a';
  22. if (c2>='A' && c2<='Z') c2 = c2-'A'+'a';
  23. if (c1=='Ä') c1= 'ä';
  24. if (c2=='Ä') c2= 'ä';
  25. if (c1=='Ö') c1= 'ö';
  26. if (c2=='Ö') c2= 'ö';
  27. if (c1!=c2) break;
  28. s1++; s2++;
  29. }
  30. if (*s2==0 && *s1==0) return 1; else return 0;
  31. }
  32. CTString::CTString( TSBYTE *initial ) {
  33. mData = 0;
  34. insert( initial );
  35. }
  36. CTString::~CTString() {
  37. if (mData) delete [] mData;
  38. };
  39. void CTString::set( const TSBYTE *set ) {
  40. if (mData) { delete [] mData; mData = 0; }
  41. if (!set) return;
  42. TSDWORD l = length(set);
  43. mData = new TSBYTE[ l+1 ];
  44. memcpy( mData, set, l );
  45. //for (TSDWORD f=0; f<l; f++) mData[f] = set[f];
  46. mData[l] = 0;
  47. };
  48. void CTString::emphty() {
  49. if (mData) delete [] mData;
  50. mData = 0;
  51. };
  52. void CTString::insert( const TSBYTE *text, TSDWORD pos ) {
  53. if (text==0) return;
  54. TSDWORD curlen = length();
  55. TSDWORD addLength = length( text );
  56. if (pos<0) pos = curlen;
  57. TSBYTE *oldData = mData;
  58. mData = new TSBYTE[ curlen + addLength + 1 ];
  59. // copy utill pos.
  60. if (oldData) {
  61. memcpy( mData, oldData, pos ); // old data, part 1
  62. //for (f=0; f<pos; f++) mData[f] = oldData[f];
  63. }
  64. // copy the new data.
  65. memcpy( mData+pos, text, addLength );
  66. //for (f=0; f<addLength; f++) mData[pos+f] = text[f];
  67. if (oldData) {
  68. if (curlen!=pos) {
  69. memcpy( mData+pos+addLength, oldData+pos,curlen-pos ); // old data, part 2
  70. //for (f=0; f<(curlen-pos); f++) mData[pos+addLength+f] = oldData[pos+f];
  71. }
  72. delete [] oldData;
  73. }
  74. mData[ addLength+curlen ] = 0; // zero the string.
  75. };
  76. void CTString::eraseLast() {
  77. if (!mData) return;
  78. TSDWORD l = length();
  79. if (l>0) mData[l-1]=0; // do not reallocate..no need.
  80. };
  81. void CTString::erase( TSDWORD beg, TSDWORD end ) {
  82. if (!mData) return;
  83. TSDWORD curlen = length();
  84. if (beg>=curlen) return;
  85. if (end<0) return;
  86. if (end>=curlen) end = curlen;
  87. if (beg<0) beg=0;
  88. TSDWORD removelen = end-beg;
  89. if (removelen >= curlen) { delete [] mData; mData = 0; }
  90. TSBYTE *oldData = mData;
  91. if (beg>0) {
  92. memcpy( mData, oldData, beg );
  93. //for (TSDWORD f=0; f<beg; f++) mData[f] = oldData[f];
  94. }
  95. if (curlen-end>0) {
  96. memcpy( mData+beg, oldData+end, curlen-end );
  97. //for (TSDWORD f=0; f<(curlen-end); f++) mData[beg+f] = oldData[end+f];
  98. }
  99. mData[ curlen - removelen ] = 0;
  100. delete [] oldData;
  101. };
  102. TSDWORD CTString::length( const TSBYTE *str) {
  103. if (!str) str = mData;
  104. if (!str) return 0;
  105. TSDWORD rval=0;
  106. while ( str[rval] ) rval ++; return rval;
  107. };
  108. TDWORD CTString::cstr_getHex( TSBYTE v ) {
  109. if (v>='0' && v<='9') return (TDWORD)(v-'0');
  110. if (v>='A' && v<='Z') v = v-'A'+'a'; // low case
  111. if (v>='a' && v<='f') return 10+(v-'a');
  112. return 0;
  113. };
  114. TDWORD CTString::cstr_scanColour( const TSBYTE *string, TDWORD def ) {
  115. if (string==0 || string[0] == 0) return def;
  116. return (
  117. (cstr_getHex(string[0])<<28) | (cstr_getHex(string[1])<<24) |
  118. (cstr_getHex(string[2])<<20) | (cstr_getHex(string[3])<<16) |
  119. (cstr_getHex(string[4])<<12) | (cstr_getHex(string[5])<<8) |
  120. (cstr_getHex(string[6])<<4) | (cstr_getHex(string[7])<<0)
  121. );
  122. };
  123. TDWORD CTString::cstr_scanShortColour( const TSBYTE *string, TDWORD def ) {
  124. if (string==0 || string[0] == 0) return def;
  125. return (
  126. (cstr_getHex(string[0])<<28) | (cstr_getHex(string[0])<<24) |
  127. (cstr_getHex(string[1])<<20) | (cstr_getHex(string[1])<<16) |
  128. (cstr_getHex(string[2])<<12) | (cstr_getHex(string[2])<<8) |
  129. (cstr_getHex(string[3])<<4) | (cstr_getHex(string[3])<<0)
  130. );
  131. };