annotate kdiff3/diff_ext_for_kdiff3/diffextstring.h @ 113:7bca1f1340f6 tip

Build fixes for Xcode 10 / Qt 5.12
author Chris Cannam
date Mon, 17 Dec 2018 11:13:01 +0000
parents 08ea9b86c12c
children
rev   line source
joachim99@75 1 /*
joachim99@75 2 * Copyright (c) 2003, Sergey Zorin. All rights reserved.
joachim99@75 3 *
joachim99@75 4 * This software is distributable under the BSD license. See the terms of the
joachim99@75 5 * BSD license in the LICENSE file provided with this software.
joachim99@75 6 *
joachim99@75 7 */
joachim99@75 8
joachim99@75 9 #ifndef __string_h__
joachim99@75 10 #define __string_h__
joachim99@75 11
joachim99@75 12 #include <windows.h>
joachim99@75 13 #include <tchar.h>
joachim99@75 14
joachim99@75 15 #include <string.h>
joachim99@75 16 #include <stdlib.h>
joachim99@75 17
joachim99@75 18 class STRING;
joachim99@75 19 inline STRING operator+( const STRING& s1, const STRING& s2);
joachim99@75 20
joachim99@75 21 class STRING {
joachim99@75 22 public:
joachim99@75 23 static const int begin = 0;
joachim99@75 24 static const int end = -1;
joachim99@75 25
joachim99@75 26 public:
joachim99@75 27 STRING(const STRING& s) {
joachim99@75 28 _str = new TCHAR[s.length()+1];
joachim99@75 29 lstrcpy(_str, s);
joachim99@75 30 }
joachim99@75 31
joachim99@75 32 STRING(const TCHAR* str = TEXT("")) {
joachim99@75 33 _str = new TCHAR[lstrlen(str)+1];
joachim99@75 34 lstrcpy(_str, str);
joachim99@75 35 }
joachim99@75 36
joachim99@75 37 ~STRING() {
joachim99@75 38 delete[] _str;
joachim99@75 39 }
joachim99@75 40
joachim99@75 41 void resize( size_t newLength )
joachim99@75 42 {
joachim99@75 43 size_t oldLength = length();
joachim99@75 44 if ( newLength < oldLength ) {
joachim99@75 45 _str[newLength] = 0; // Just truncate the string
joachim99@75 46 } else if( newLength>oldLength) {
joachim99@75 47 TCHAR* p = new TCHAR[ newLength + 1 ];
joachim99@75 48 lstrcpy(p, _str);
joachim99@75 49 for( size_t i=oldLength; i<newLength; ++i)
joachim99@75 50 p[i]=TEXT(' ');
joachim99@75 51 p[newLength]=0;
joachim99@75 52 }
joachim99@75 53 }
joachim99@75 54
joachim99@75 55 STRING& operator=(const STRING& s) {
joachim99@75 56 delete[] _str;
joachim99@75 57 _str = new TCHAR[s.length()+1];
joachim99@75 58 lstrcpy(_str, s);
joachim99@75 59 return *this;
joachim99@75 60 }
joachim99@75 61
joachim99@75 62 operator TCHAR*() {
joachim99@75 63 return _str;
joachim99@75 64 }
joachim99@75 65
joachim99@75 66 operator const TCHAR*() const {
joachim99@75 67 return _str;
joachim99@75 68 }
joachim99@75 69
joachim99@75 70 const TCHAR* c_str() const {
joachim99@75 71 return _str;
joachim99@75 72 }
joachim99@75 73
joachim99@75 74 size_t length() const {
joachim99@75 75 return _tcslen(_str);
joachim99@75 76 }
joachim99@75 77
joachim99@75 78 // Also returns the length. Behaviour like std::basic_string::size.
joachim99@75 79 // See also sizeInBytes() below.
joachim99@75 80 size_t size() const {
joachim99@75 81 return length();
joachim99@75 82 }
joachim99@75 83
joachim99@75 84 // String length in bytes. May differ from length() for Unicode or MBCS
joachim99@75 85 size_t sizeInBytes() const {
joachim99@75 86 return length()*sizeof(TCHAR);
joachim99@75 87 }
joachim99@75 88
joachim99@75 89 bool empty() const
joachim99@75 90 {
joachim99@75 91 return length()==0;
joachim99@75 92 }
joachim99@75 93
joachim99@75 94 STRING substr(size_t from, size_t len=size_t(-1)) const {
joachim99@75 95 STRING tmp;
joachim99@75 96 size_t to = len==size_t(-1) ? length() : from + len;
joachim99@75 97
joachim99@75 98 if(from < to && (to <= length())) {
joachim99@75 99 size_t new_len = to - from + 1;
joachim99@75 100 TCHAR* new_str = new TCHAR[new_len+1];
joachim99@75 101 lstrcpyn(new_str, &_str[from], int(new_len) );
joachim99@75 102 new_str[new_len] = 0;
joachim99@75 103
joachim99@75 104 tmp = new_str;
joachim99@75 105 delete[] new_str;
joachim99@75 106 }
joachim99@75 107
joachim99@75 108 return tmp;
joachim99@75 109 }
joachim99@75 110
joachim99@75 111 STRING& replace( size_t pos, size_t num, const STRING& s )
joachim99@75 112 {
joachim99@75 113 *this = substr( 0, pos ) + s + substr( pos+num );
joachim99@75 114 return *this;
joachim99@75 115 }
joachim99@75 116
joachim99@75 117 bool operator ==(const STRING& s) const {
joachim99@75 118 return (lstrcmp(_str, s) == 0);
joachim99@75 119 }
joachim99@75 120
joachim99@75 121 size_t find(const STRING& s) const
joachim99@75 122 {
joachim99@75 123 const TCHAR* p = _tcsstr( _str, s._str );
joachim99@75 124 if (p)
joachim99@75 125 return p - _str;
joachim99@75 126 else
joachim99@75 127 return size_t(-1);
joachim99@75 128 }
joachim99@75 129
joachim99@75 130 STRING& operator +=(const STRING& s) {
joachim99@75 131 TCHAR* str = new TCHAR[lstrlen(_str)+s.length()+1];
joachim99@75 132
joachim99@75 133 lstrcpy(str, _str);
joachim99@75 134 lstrcat(str, s);
joachim99@75 135
joachim99@75 136 delete[] _str;
joachim99@75 137
joachim99@75 138 _str = str;
joachim99@75 139
joachim99@75 140 return *this;
joachim99@75 141 }
joachim99@75 142
joachim99@75 143 private:
joachim99@75 144 TCHAR* _str;
joachim99@75 145 };
joachim99@75 146
joachim99@75 147 inline STRING operator+( const STRING& s1, const STRING& s2) {
joachim99@75 148 STRING tmp(s1);
joachim99@75 149
joachim99@75 150 tmp+=s2;
joachim99@75 151
joachim99@75 152 return tmp;
joachim99@75 153 }
joachim99@75 154
joachim99@75 155
joachim99@75 156
joachim99@75 157 #endif // __string_h__