1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef SOLTOOLS_SIMSTR_HXX 25 #define SOLTOOLS_SIMSTR_HXX 26 27 28 class Simstr /// Simple string class. 29 { 30 // INTERFACE 31 public: 32 // LIFECYCLE 33 Simstr( 34 const char * str = 0); 35 Simstr( /** Creates Simstr out of a copy of the first 36 'nrOfBytes' bytes of 'anyBytes'. 37 Adds a '\0' at the end. */ 38 const char * anybytes, 39 int nrOfBytes); 40 Simstr( /** Creates Simstr out of a copy of the described bytes within 'anyBytes'. 41 Adds a '\0' at the end. */ 42 const char * anybytes, 43 int firstBytesPos, 44 int nrOfBytes ); 45 Simstr( /// Creates Simstr of 'anzahl' times 'c'. 46 char c, 47 int anzahl); 48 Simstr( 49 const Simstr & S); 50 ~Simstr(); 51 52 53 // OPERATORS 54 operator const char*() const; 55 56 Simstr & operator=( 57 const Simstr & S ); 58 59 Simstr operator+( 60 const Simstr & S ) const; 61 Simstr & operator+=( 62 const Simstr & S ); 63 Simstr & operator+=( 64 const char * s ); 65 66 bool operator==( 67 const Simstr & S ) const; 68 bool operator!=( 69 const Simstr & S ) const; 70 bool operator<( 71 const Simstr & S ) const; 72 bool operator>( 73 const Simstr & S ) const; 74 bool operator<=( 75 const Simstr & S ) const; 76 bool operator>=( 77 const Simstr & S ) const; 78 // INFO 79 static const Simstr & 80 null_(); 81 82 const char * str() const; 83 int l() const; // Length of string without '\0' at end. 84 char * s(); // ATTENTION !!! // Only to be used, when a function needs a 'char*' but 85 // nevertheless THAT WILL BE NOT CHANGED! 86 // Typecasts to 'const char*' are performed automatically. 87 char get( 88 int n) const; 89 char get_front() const; 90 char get_back() const; 91 Simstr get( 92 int startPos, 93 int anzahl ) const; 94 Simstr get_front( 95 int anzahl ) const; 96 Simstr get_back( 97 int anzahl ) const; 98 99 int pos_first( 100 char c ) const; 101 int pos_first_after( 102 char c, 103 int startSearchPos ) const; 104 int pos_last( 105 char c ) const; 106 int pos_first( 107 const Simstr & S ) const; 108 int pos_last( 109 const Simstr & S ) const; 110 int count( 111 char c ) const; 112 bool is_empty() const; // Only true if object == "". 113 bool is_no_text() const; // String may contain spaces or tabs. 114 115 Simstr get_first_token( 116 char c ) const; 117 Simstr get_last_token( 118 char c ) const; 119 120 // ACCESS 121 char & ch( /** Reference to sz[n]. Allows change of this char. 122 !!! No safety, if n is out of the allowed range! */ 123 int n ); 124 125 // OPERATIONS 126 void insert( 127 int pos, 128 char c ); 129 void push_front( 130 char c ); 131 void push_back( 132 char c ); 133 void insert( 134 int pos, 135 const Simstr & S ); 136 void push_front( 137 const Simstr & S ); 138 void push_back( 139 const Simstr & S ); 140 141 void remove( 142 int pos, 143 int anzahl = 1 ); 144 void remove_trailing_blanks(); 145 void pop_front( 146 int anzahl = 1 ); 147 void pop_back( 148 int anzahl = 1 ); 149 void rem_back_from( 150 int removeStartPos ); 151 void remove_all( 152 char c ); 153 void remove_all( // Starts search left. 154 const Simstr & S ); 155 void strip( 156 char c ); // Removes all characters == c from front and back. 157 // c == ' ' removes also TABs !!! 158 void empty(); // Changes object to the value "". 159 160 void replace( 161 int pos, 162 char c ); 163 void replace( 164 int startPos, 165 int anzahl, 166 const Simstr & S ); 167 void replace_all( 168 char oldCh, 169 char newCh ); 170 void replace_all( 171 const Simstr & oldS, 172 const Simstr & newS ); 173 void to_lower(); 174 175 Simstr take_first_token( /// Token is removed from the Simstr. 176 char c ); 177 Simstr take_last_token( /// Token is removed from the Simstr. 178 char c ); 179 private: 180 // DATA 181 char * sz; 182 int len; 183 }; 184 185 // Simstr - char* / char - concatenations 186 Simstr operator+(const char * str, const Simstr & S); 187 Simstr operator+(const Simstr & S, const char * str); 188 Simstr operator+(char c, const Simstr & S); 189 Simstr operator+(const Simstr & S, char c); 190 191 // Simstr - char* - comparison operators 192 bool operator==(const Simstr & S, const char * str); 193 bool operator!=(const Simstr & S, const char * str); 194 bool operator<(const Simstr & S, const char * str); 195 bool operator>(const Simstr & S, const char * str); 196 bool operator<=(const Simstr & S, const char * str); 197 bool operator>=(const Simstr & S, const char * str); 198 bool operator==(const char * str, const Simstr & S); 199 bool operator!=(const char * str, const Simstr & S); 200 bool operator<(const char * str, const Simstr & S); 201 bool operator>(const char * str, const Simstr & S); 202 bool operator<=(const char * str, const Simstr & S); 203 bool operator>=(const char * str, const Simstr & S); 204 205 206 inline const char * 207 Simstr::str() const { return sz; } 208 inline char * 209 Simstr::s() { return sz; } 210 inline int 211 Simstr::l() const { return len; } 212 inline 213 Simstr::operator const char*() const { return sz; } 214 inline bool 215 Simstr::is_empty() const { return len == 0; } 216 217 218 #endif 219 220