1*8a106958SDamjan Jovanovic /**************************************************************
2*8a106958SDamjan Jovanovic *
3*8a106958SDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one
4*8a106958SDamjan Jovanovic * or more contributor license agreements. See the NOTICE file
5*8a106958SDamjan Jovanovic * distributed with this work for additional information
6*8a106958SDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file
7*8a106958SDamjan Jovanovic * to you under the Apache License, Version 2.0 (the
8*8a106958SDamjan Jovanovic * "License"); you may not use this file except in compliance
9*8a106958SDamjan Jovanovic * with the License. You may obtain a copy of the License at
10*8a106958SDamjan Jovanovic *
11*8a106958SDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0
12*8a106958SDamjan Jovanovic *
13*8a106958SDamjan Jovanovic * Unless required by applicable law or agreed to in writing,
14*8a106958SDamjan Jovanovic * software distributed under the License is distributed on an
15*8a106958SDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*8a106958SDamjan Jovanovic * KIND, either express or implied. See the License for the
17*8a106958SDamjan Jovanovic * specific language governing permissions and limitations
18*8a106958SDamjan Jovanovic * under the License.
19*8a106958SDamjan Jovanovic *
20*8a106958SDamjan Jovanovic *************************************************************/
21*8a106958SDamjan Jovanovic
22*8a106958SDamjan Jovanovic
23*8a106958SDamjan Jovanovic
24*8a106958SDamjan Jovanovic #ifndef COSV_STRING_HXX
25*8a106958SDamjan Jovanovic #define COSV_STRING_HXX
26*8a106958SDamjan Jovanovic
27*8a106958SDamjan Jovanovic // USED SERVICES
28*8a106958SDamjan Jovanovic #include <cosv/stringdata.hxx>
29*8a106958SDamjan Jovanovic #include <cosv/str_types.hxx>
30*8a106958SDamjan Jovanovic #include <string.h>
31*8a106958SDamjan Jovanovic #include <cosv/csv_ostream.hxx>
32*8a106958SDamjan Jovanovic #include <vector>
33*8a106958SDamjan Jovanovic
34*8a106958SDamjan Jovanovic
35*8a106958SDamjan Jovanovic
36*8a106958SDamjan Jovanovic
37*8a106958SDamjan Jovanovic namespace csv
38*8a106958SDamjan Jovanovic {
39*8a106958SDamjan Jovanovic
40*8a106958SDamjan Jovanovic
41*8a106958SDamjan Jovanovic /** The Simple String:
42*8a106958SDamjan Jovanovic It is used to just hold short to middle long texts as
43*8a106958SDamjan Jovanovic data, which are constant at most times. They are reference
44*8a106958SDamjan Jovanovic counted, so they are space efficient and have constant time
45*8a106958SDamjan Jovanovic copy semantics.
46*8a106958SDamjan Jovanovic
47*8a106958SDamjan Jovanovic For all compare() functions the return value is like in strcmp().
48*8a106958SDamjan Jovanovic
49*8a106958SDamjan Jovanovic @attention
50*8a106958SDamjan Jovanovic The present version of this class is NOT thread safe.
51*8a106958SDamjan Jovanovic */
52*8a106958SDamjan Jovanovic
53*8a106958SDamjan Jovanovic
54*8a106958SDamjan Jovanovic class String
55*8a106958SDamjan Jovanovic {
56*8a106958SDamjan Jovanovic public:
57*8a106958SDamjan Jovanovic typedef String self;
58*8a106958SDamjan Jovanovic
59*8a106958SDamjan Jovanovic typedef str::size size_type;
60*8a106958SDamjan Jovanovic typedef str::position position_type;
61*8a106958SDamjan Jovanovic
62*8a106958SDamjan Jovanovic typedef const char * const_iterator;
63*8a106958SDamjan Jovanovic
64*8a106958SDamjan Jovanovic // LIFECYCLE
65*8a106958SDamjan Jovanovic String();
66*8a106958SDamjan Jovanovic
67*8a106958SDamjan Jovanovic /// Intentionally not explicit, smooth casting is intended.
68*8a106958SDamjan Jovanovic String(
69*8a106958SDamjan Jovanovic const char * i_str );
70*8a106958SDamjan Jovanovic /// @precond i_nLength <= strlen(i_str) or i_nLength == str::maxsize.
71*8a106958SDamjan Jovanovic String(
72*8a106958SDamjan Jovanovic const char * i_str,
73*8a106958SDamjan Jovanovic size_type i_nLength );
74*8a106958SDamjan Jovanovic /** @precond i_nLength == str::maxsize
75*8a106958SDamjan Jovanovic || i_nStartPosition+i_nLength <= i_rStr.Size().
76*8a106958SDamjan Jovanovic */
77*8a106958SDamjan Jovanovic String(
78*8a106958SDamjan Jovanovic const self & i_rStr,
79*8a106958SDamjan Jovanovic position_type i_nStartPosition,
80*8a106958SDamjan Jovanovic size_type i_nLength );
81*8a106958SDamjan Jovanovic /** @precond i_itBegin and i_itEnd are in the same valid
82*8a106958SDamjan Jovanovic memory-area, such that zero to finite times repetition of
83*8a106958SDamjan Jovanovic ++i_itBegin leads to i_itBegin == i_itEnd.
84*8a106958SDamjan Jovanovic */
85*8a106958SDamjan Jovanovic String(
86*8a106958SDamjan Jovanovic const_iterator i_itBegin,
87*8a106958SDamjan Jovanovic const_iterator i_itEnd );
88*8a106958SDamjan Jovanovic
89*8a106958SDamjan Jovanovic String(
90*8a106958SDamjan Jovanovic const self & i_rStr );
91*8a106958SDamjan Jovanovic
92*8a106958SDamjan Jovanovic ~String();
93*8a106958SDamjan Jovanovic // OPERATORS
94*8a106958SDamjan Jovanovic self & operator=(
95*8a106958SDamjan Jovanovic const self & i_rStr );
96*8a106958SDamjan Jovanovic self & operator=(
97*8a106958SDamjan Jovanovic const char * i_str );
98*8a106958SDamjan Jovanovic
99*8a106958SDamjan Jovanovic operator const char * () const;
100*8a106958SDamjan Jovanovic
101*8a106958SDamjan Jovanovic bool operator==(
102*8a106958SDamjan Jovanovic const self & i_rStr ) const;
103*8a106958SDamjan Jovanovic bool operator!=(
104*8a106958SDamjan Jovanovic const self & i_rStr ) const;
105*8a106958SDamjan Jovanovic bool operator<(
106*8a106958SDamjan Jovanovic const self & i_rStr ) const;
107*8a106958SDamjan Jovanovic bool operator>(
108*8a106958SDamjan Jovanovic const self & i_rStr ) const;
109*8a106958SDamjan Jovanovic bool operator<=(
110*8a106958SDamjan Jovanovic const self & i_rStr ) const;
111*8a106958SDamjan Jovanovic bool operator>=(
112*8a106958SDamjan Jovanovic const self & i_rStr ) const;
113*8a106958SDamjan Jovanovic
114*8a106958SDamjan Jovanovic // OPERATIONS
115*8a106958SDamjan Jovanovic void clear();
116*8a106958SDamjan Jovanovic
117*8a106958SDamjan Jovanovic void swap(
118*8a106958SDamjan Jovanovic self & i_rStr );
119*8a106958SDamjan Jovanovic
120*8a106958SDamjan Jovanovic /** @precond i_nLength == str::maxsize
121*8a106958SDamjan Jovanovic || i_nStartPosition+i_nLength <= i_rStr.Size().
122*8a106958SDamjan Jovanovic */
123*8a106958SDamjan Jovanovic void assign(
124*8a106958SDamjan Jovanovic const self & i_rStr,
125*8a106958SDamjan Jovanovic position_type i_nStartPosition,
126*8a106958SDamjan Jovanovic size_type i_nLength );
127*8a106958SDamjan Jovanovic void assign(
128*8a106958SDamjan Jovanovic const char * i_str );
129*8a106958SDamjan Jovanovic /// @precond i_nLength == str::maxsize OR i_nLength < strlen(i_str) .
130*8a106958SDamjan Jovanovic void assign(
131*8a106958SDamjan Jovanovic const char * i_str,
132*8a106958SDamjan Jovanovic size_type i_nLength );
133*8a106958SDamjan Jovanovic /// Create a string consisting of a sequence of i_nCount times the same char.
134*8a106958SDamjan Jovanovic void assign(
135*8a106958SDamjan Jovanovic size_type i_nCount,
136*8a106958SDamjan Jovanovic char i_c );
137*8a106958SDamjan Jovanovic /** @precond i_itBegin and i_itEnd are in the same valid
138*8a106958SDamjan Jovanovic memory-area, such that zero to finite times repetition of
139*8a106958SDamjan Jovanovic ++i_itBegin leads to i_itBegin == i_itEnd.
140*8a106958SDamjan Jovanovic */
141*8a106958SDamjan Jovanovic void assign(
142*8a106958SDamjan Jovanovic const_iterator i_itBegin,
143*8a106958SDamjan Jovanovic const_iterator i_itEnd );
144*8a106958SDamjan Jovanovic
145*8a106958SDamjan Jovanovic // INQUIRY
146*8a106958SDamjan Jovanovic const char * c_str() const;
147*8a106958SDamjan Jovanovic const char * data() const;
148*8a106958SDamjan Jovanovic
149*8a106958SDamjan Jovanovic bool empty() const;
150*8a106958SDamjan Jovanovic size_type size() const;
151*8a106958SDamjan Jovanovic size_type length() const;
152*8a106958SDamjan Jovanovic
153*8a106958SDamjan Jovanovic const char & char_at(
154*8a106958SDamjan Jovanovic position_type i_nPosition ) const;
155*8a106958SDamjan Jovanovic
156*8a106958SDamjan Jovanovic const_iterator begin() const;
157*8a106958SDamjan Jovanovic
158*8a106958SDamjan Jovanovic /// This is inefficient, so shouldn't be used within loops.
159*8a106958SDamjan Jovanovic const_iterator end() const;
160*8a106958SDamjan Jovanovic
161*8a106958SDamjan Jovanovic int compare(
162*8a106958SDamjan Jovanovic const self & i_rStr ) const;
163*8a106958SDamjan Jovanovic int compare(
164*8a106958SDamjan Jovanovic const CharOrder_Table &
165*8a106958SDamjan Jovanovic i_rOrder,
166*8a106958SDamjan Jovanovic const self & i_rStr ) const;
167*8a106958SDamjan Jovanovic
168*8a106958SDamjan Jovanovic self substr(
169*8a106958SDamjan Jovanovic position_type i_nStartPosition = 0,
170*8a106958SDamjan Jovanovic size_type i_nLength = str::maxsize ) const;
171*8a106958SDamjan Jovanovic
172*8a106958SDamjan Jovanovic /** @param i_strToSearch [i_strToSearch != 0]
173*8a106958SDamjan Jovanovic i_strToSearch == "" will return npos.
174*8a106958SDamjan Jovanovic */
175*8a106958SDamjan Jovanovic position_type find(
176*8a106958SDamjan Jovanovic const char * i_strToSearch,
177*8a106958SDamjan Jovanovic position_type i_nSearchStartPosition = 0 ) const;
178*8a106958SDamjan Jovanovic position_type find(
179*8a106958SDamjan Jovanovic char i_charToSearch,
180*8a106958SDamjan Jovanovic position_type i_nSearchStartPosition = 0 ) const;
181*8a106958SDamjan Jovanovic
182*8a106958SDamjan Jovanovic //*********** Not yet implemented *********************//
183*8a106958SDamjan Jovanovic position_type rfind(
184*8a106958SDamjan Jovanovic const char * i_strToSearch,
185*8a106958SDamjan Jovanovic position_type i_nSearchStartPosition = str::npos ) const;
186*8a106958SDamjan Jovanovic position_type rfind(
187*8a106958SDamjan Jovanovic char i_charToSearch,
188*8a106958SDamjan Jovanovic position_type i_nSearchStartPosition = str::npos ) const;
189*8a106958SDamjan Jovanovic
190*8a106958SDamjan Jovanovic position_type find_first_not_of(
191*8a106958SDamjan Jovanovic const char * i_strToSearch,
192*8a106958SDamjan Jovanovic position_type i_nSearchStartPosition = 0 ) const;
193*8a106958SDamjan Jovanovic position_type find_first_not_of(
194*8a106958SDamjan Jovanovic char i_charToSearch,
195*8a106958SDamjan Jovanovic position_type i_nSearchStartPosition = 0 ) const;
196*8a106958SDamjan Jovanovic
197*8a106958SDamjan Jovanovic position_type find_last_not_of(
198*8a106958SDamjan Jovanovic const char * i_strToSearch,
199*8a106958SDamjan Jovanovic position_type i_nSearchStartPosition = str::npos ) const;
200*8a106958SDamjan Jovanovic position_type find_last_not_of(
201*8a106958SDamjan Jovanovic char i_charToSearch,
202*8a106958SDamjan Jovanovic position_type i_nSearchStartPosition = str::npos ) const;
203*8a106958SDamjan Jovanovic //*********** end - not yet implemented *****************//
204*8a106958SDamjan Jovanovic
205*8a106958SDamjan Jovanovic static const self & Null_();
206*8a106958SDamjan Jovanovic static const char & Nulch_();
207*8a106958SDamjan Jovanovic
208*8a106958SDamjan Jovanovic private:
209*8a106958SDamjan Jovanovic struct S_Data
210*8a106958SDamjan Jovanovic {
211*8a106958SDamjan Jovanovic S_Data();
212*8a106958SDamjan Jovanovic /// @precond i_nValidLength <= strlen(i_sData) or i_nValidLength == str::maxsize.
213*8a106958SDamjan Jovanovic explicit S_Data(
214*8a106958SDamjan Jovanovic const char * i_sData,
215*8a106958SDamjan Jovanovic size_type i_nValidLength = str::maxsize );
216*8a106958SDamjan Jovanovic ~S_Data();
217*8a106958SDamjan Jovanovic
218*8a106958SDamjan Jovanovic const S_Data * Acquire() const;
219*8a106958SDamjan Jovanovic
220*8a106958SDamjan Jovanovic /// Deletes this, if nCount becomes 0.
221*8a106958SDamjan Jovanovic void Release() const;
222*8a106958SDamjan Jovanovic
223*8a106958SDamjan Jovanovic StringData<char> aStr;
224*8a106958SDamjan Jovanovic mutable UINT32 nCount;
225*8a106958SDamjan Jovanovic
226*8a106958SDamjan Jovanovic private:
227*8a106958SDamjan Jovanovic // Forbidden functions, because this is a refcounted structure.
228*8a106958SDamjan Jovanovic S_Data(const S_Data&);
229*8a106958SDamjan Jovanovic S_Data & operator=(const S_Data&);
230*8a106958SDamjan Jovanovic };
231*8a106958SDamjan Jovanovic
232*8a106958SDamjan Jovanovic // Locals
233*8a106958SDamjan Jovanovic const StringData<char> &
234*8a106958SDamjan Jovanovic Str() const;
235*8a106958SDamjan Jovanovic
236*8a106958SDamjan Jovanovic // DATA
237*8a106958SDamjan Jovanovic const S_Data * pd;
238*8a106958SDamjan Jovanovic };
239*8a106958SDamjan Jovanovic
240*8a106958SDamjan Jovanovic
241*8a106958SDamjan Jovanovic //********** Global compare functions ***************//
242*8a106958SDamjan Jovanovic
243*8a106958SDamjan Jovanovic //*** Natural order, no substrings
244*8a106958SDamjan Jovanovic
245*8a106958SDamjan Jovanovic inline int compare(
246*8a106958SDamjan Jovanovic const String & i_s1,
247*8a106958SDamjan Jovanovic const String & i_s2 );
248*8a106958SDamjan Jovanovic inline int compare(
249*8a106958SDamjan Jovanovic const String & i_s1,
250*8a106958SDamjan Jovanovic const char * i_s2 );
251*8a106958SDamjan Jovanovic inline int compare(
252*8a106958SDamjan Jovanovic const char * i_s1,
253*8a106958SDamjan Jovanovic const String & i_s2 );
254*8a106958SDamjan Jovanovic inline int compare(
255*8a106958SDamjan Jovanovic const char * i_s1,
256*8a106958SDamjan Jovanovic const char * i_s2 );
257*8a106958SDamjan Jovanovic
258*8a106958SDamjan Jovanovic //*** Natural order, substrings
259*8a106958SDamjan Jovanovic
260*8a106958SDamjan Jovanovic int compare(
261*8a106958SDamjan Jovanovic const String & i_s1,
262*8a106958SDamjan Jovanovic csv::str::position i_nStartPosition1,
263*8a106958SDamjan Jovanovic const char * i_s2,
264*8a106958SDamjan Jovanovic csv::str::size i_nLength );
265*8a106958SDamjan Jovanovic int compare(
266*8a106958SDamjan Jovanovic const char * i_s1,
267*8a106958SDamjan Jovanovic const String & i_s2,
268*8a106958SDamjan Jovanovic csv::str::position i_nStartPosition2,
269*8a106958SDamjan Jovanovic csv::str::size i_nLength );
270*8a106958SDamjan Jovanovic inline int compare(
271*8a106958SDamjan Jovanovic const char * i_s1,
272*8a106958SDamjan Jovanovic const char * i_s2,
273*8a106958SDamjan Jovanovic csv::str::size i_nLength );
274*8a106958SDamjan Jovanovic
275*8a106958SDamjan Jovanovic //*** Defined order, no substrings
276*8a106958SDamjan Jovanovic
277*8a106958SDamjan Jovanovic inline int compare(
278*8a106958SDamjan Jovanovic const CharOrder_Table & i_rOrder,
279*8a106958SDamjan Jovanovic const String & i_s1,
280*8a106958SDamjan Jovanovic const char * i_s2 );
281*8a106958SDamjan Jovanovic inline int compare(
282*8a106958SDamjan Jovanovic const CharOrder_Table & i_rOrder,
283*8a106958SDamjan Jovanovic const char * i_s1,
284*8a106958SDamjan Jovanovic const String & i_s2 );
285*8a106958SDamjan Jovanovic int compare(
286*8a106958SDamjan Jovanovic const CharOrder_Table & i_rOrder,
287*8a106958SDamjan Jovanovic const char * i_s1,
288*8a106958SDamjan Jovanovic const char * i_s2 );
289*8a106958SDamjan Jovanovic
290*8a106958SDamjan Jovanovic //*** Defined order, substrings
291*8a106958SDamjan Jovanovic
292*8a106958SDamjan Jovanovic int compare(
293*8a106958SDamjan Jovanovic const CharOrder_Table & i_rOrder,
294*8a106958SDamjan Jovanovic const String & i_s1,
295*8a106958SDamjan Jovanovic csv::str::position i_nStartPosition1,
296*8a106958SDamjan Jovanovic const char * i_s2,
297*8a106958SDamjan Jovanovic csv::str::size i_nLength2 );
298*8a106958SDamjan Jovanovic int compare(
299*8a106958SDamjan Jovanovic const CharOrder_Table & i_rOrder,
300*8a106958SDamjan Jovanovic const char * i_s1,
301*8a106958SDamjan Jovanovic const String & i_s2,
302*8a106958SDamjan Jovanovic csv::str::position i_nStartPosition2,
303*8a106958SDamjan Jovanovic csv::str::size i_nLength );
304*8a106958SDamjan Jovanovic int compare(
305*8a106958SDamjan Jovanovic const CharOrder_Table & i_rOrder,
306*8a106958SDamjan Jovanovic const char * i_s1,
307*8a106958SDamjan Jovanovic const char * i_s2,
308*8a106958SDamjan Jovanovic csv::str::size i_nLength );
309*8a106958SDamjan Jovanovic
310*8a106958SDamjan Jovanovic
311*8a106958SDamjan Jovanovic } // namespace csv
312*8a106958SDamjan Jovanovic
313*8a106958SDamjan Jovanovic
314*8a106958SDamjan Jovanovic
315*8a106958SDamjan Jovanovic
316*8a106958SDamjan Jovanovic //****************** global comparation operators *********************//
317*8a106958SDamjan Jovanovic
318*8a106958SDamjan Jovanovic inline bool operator==(
319*8a106958SDamjan Jovanovic const csv::String & i_s1,
320*8a106958SDamjan Jovanovic const char * i_s2 );
321*8a106958SDamjan Jovanovic inline bool operator!=(
322*8a106958SDamjan Jovanovic const csv::String & i_s1,
323*8a106958SDamjan Jovanovic const char * i_s2 );
324*8a106958SDamjan Jovanovic inline bool operator<(
325*8a106958SDamjan Jovanovic const csv::String & i_s1,
326*8a106958SDamjan Jovanovic const char * i_s2 );
327*8a106958SDamjan Jovanovic inline bool operator>(
328*8a106958SDamjan Jovanovic const csv::String & i_s1,
329*8a106958SDamjan Jovanovic const char * i_s2 );
330*8a106958SDamjan Jovanovic inline bool operator<=(
331*8a106958SDamjan Jovanovic const csv::String & i_s1,
332*8a106958SDamjan Jovanovic const char * i_s2 );
333*8a106958SDamjan Jovanovic inline bool operator>=(
334*8a106958SDamjan Jovanovic const csv::String & i_s1,
335*8a106958SDamjan Jovanovic const char * i_s2 );
336*8a106958SDamjan Jovanovic
337*8a106958SDamjan Jovanovic inline bool operator==(
338*8a106958SDamjan Jovanovic const char * i_s1,
339*8a106958SDamjan Jovanovic const csv::String & i_s2 );
340*8a106958SDamjan Jovanovic inline bool operator!=(
341*8a106958SDamjan Jovanovic const char * i_s1,
342*8a106958SDamjan Jovanovic const csv::String & i_s2 );
343*8a106958SDamjan Jovanovic inline bool operator<(
344*8a106958SDamjan Jovanovic const char * i_s1,
345*8a106958SDamjan Jovanovic const csv::String & i_s2 );
346*8a106958SDamjan Jovanovic inline bool operator>(
347*8a106958SDamjan Jovanovic const char * i_s1,
348*8a106958SDamjan Jovanovic const csv::String & i_s2 );
349*8a106958SDamjan Jovanovic inline bool operator<=(
350*8a106958SDamjan Jovanovic const char * i_s1,
351*8a106958SDamjan Jovanovic const csv::String & i_s2 );
352*8a106958SDamjan Jovanovic inline bool operator>=(
353*8a106958SDamjan Jovanovic const char * i_s1,
354*8a106958SDamjan Jovanovic const csv::String & i_s2 );
355*8a106958SDamjan Jovanovic
356*8a106958SDamjan Jovanovic
357*8a106958SDamjan Jovanovic //****************** global stream operators *********************//
358*8a106958SDamjan Jovanovic
359*8a106958SDamjan Jovanovic
360*8a106958SDamjan Jovanovic inline csv::ostream &
361*8a106958SDamjan Jovanovic operator<<( csv::ostream & o_rOut,
362*8a106958SDamjan Jovanovic const csv::String & i_rSrc );
363*8a106958SDamjan Jovanovic
364*8a106958SDamjan Jovanovic
365*8a106958SDamjan Jovanovic
366*8a106958SDamjan Jovanovic
367*8a106958SDamjan Jovanovic // IMPLEMENTATION
368*8a106958SDamjan Jovanovic namespace csv
369*8a106958SDamjan Jovanovic {
370*8a106958SDamjan Jovanovic
371*8a106958SDamjan Jovanovic
372*8a106958SDamjan Jovanovic inline const StringData<char> &
Str() const373*8a106958SDamjan Jovanovic String::Str() const
374*8a106958SDamjan Jovanovic { return pd->aStr; }
375*8a106958SDamjan Jovanovic
376*8a106958SDamjan Jovanovic
377*8a106958SDamjan Jovanovic inline const char &
char_at(position_type i_nPosition) const378*8a106958SDamjan Jovanovic String::char_at( position_type i_nPosition ) const
379*8a106958SDamjan Jovanovic { if ( i_nPosition < Str().Size() )
380*8a106958SDamjan Jovanovic return Str().Data()[i_nPosition];
381*8a106958SDamjan Jovanovic return Nulch_();
382*8a106958SDamjan Jovanovic }
383*8a106958SDamjan Jovanovic
384*8a106958SDamjan Jovanovic inline bool
operator ==(const self & i_rStr) const385*8a106958SDamjan Jovanovic String::operator==( const self & i_rStr ) const
386*8a106958SDamjan Jovanovic { return compare(i_rStr) == 0; }
387*8a106958SDamjan Jovanovic
388*8a106958SDamjan Jovanovic inline bool
operator !=(const self & i_rStr) const389*8a106958SDamjan Jovanovic String::operator!=( const self & i_rStr ) const
390*8a106958SDamjan Jovanovic { return compare(i_rStr) != 0; }
391*8a106958SDamjan Jovanovic
392*8a106958SDamjan Jovanovic inline bool
operator <(const self & i_rStr) const393*8a106958SDamjan Jovanovic String::operator<( const self & i_rStr ) const
394*8a106958SDamjan Jovanovic { return compare(i_rStr) < 0; }
395*8a106958SDamjan Jovanovic
396*8a106958SDamjan Jovanovic inline bool
operator >(const self & i_rStr) const397*8a106958SDamjan Jovanovic String::operator>( const self & i_rStr ) const
398*8a106958SDamjan Jovanovic { return compare(i_rStr) > 0; }
399*8a106958SDamjan Jovanovic
400*8a106958SDamjan Jovanovic inline bool
operator <=(const self & i_rStr) const401*8a106958SDamjan Jovanovic String::operator<=( const self & i_rStr ) const
402*8a106958SDamjan Jovanovic { return compare(i_rStr) <= 0; }
403*8a106958SDamjan Jovanovic
404*8a106958SDamjan Jovanovic inline bool
operator >=(const self & i_rStr) const405*8a106958SDamjan Jovanovic String::operator>=( const self & i_rStr ) const
406*8a106958SDamjan Jovanovic { return compare(i_rStr) >= 0; }
407*8a106958SDamjan Jovanovic
408*8a106958SDamjan Jovanovic inline void
clear()409*8a106958SDamjan Jovanovic String::clear()
410*8a106958SDamjan Jovanovic { operator=( String::Null_() ); }
411*8a106958SDamjan Jovanovic
412*8a106958SDamjan Jovanovic inline const char *
c_str() const413*8a106958SDamjan Jovanovic String::c_str() const
414*8a106958SDamjan Jovanovic { return Str().Data(); }
415*8a106958SDamjan Jovanovic
416*8a106958SDamjan Jovanovic inline
operator const char*() const417*8a106958SDamjan Jovanovic String::operator const char * () const
418*8a106958SDamjan Jovanovic { return c_str(); }
419*8a106958SDamjan Jovanovic
420*8a106958SDamjan Jovanovic inline const char *
data() const421*8a106958SDamjan Jovanovic String::data() const
422*8a106958SDamjan Jovanovic { return c_str(); }
423*8a106958SDamjan Jovanovic
424*8a106958SDamjan Jovanovic inline String::size_type
size() const425*8a106958SDamjan Jovanovic String::size() const
426*8a106958SDamjan Jovanovic { return Str().Size(); }
427*8a106958SDamjan Jovanovic
428*8a106958SDamjan Jovanovic inline bool
empty() const429*8a106958SDamjan Jovanovic String::empty() const
430*8a106958SDamjan Jovanovic { return size() == 0; }
431*8a106958SDamjan Jovanovic
432*8a106958SDamjan Jovanovic inline String::size_type
length() const433*8a106958SDamjan Jovanovic String::length() const
434*8a106958SDamjan Jovanovic { return size(); }
435*8a106958SDamjan Jovanovic
436*8a106958SDamjan Jovanovic inline String::const_iterator
begin() const437*8a106958SDamjan Jovanovic String::begin() const
438*8a106958SDamjan Jovanovic { return data(); }
439*8a106958SDamjan Jovanovic
440*8a106958SDamjan Jovanovic inline String::const_iterator
end() const441*8a106958SDamjan Jovanovic String::end() const
442*8a106958SDamjan Jovanovic { return data() + size(); }
443*8a106958SDamjan Jovanovic
444*8a106958SDamjan Jovanovic
445*8a106958SDamjan Jovanovic
446*8a106958SDamjan Jovanovic //****************** global compare-functions ********************//
447*8a106958SDamjan Jovanovic inline int
compare(const String & i_s1,const String & i_s2)448*8a106958SDamjan Jovanovic compare( const String & i_s1,
449*8a106958SDamjan Jovanovic const String & i_s2 )
450*8a106958SDamjan Jovanovic { return i_s1.compare(i_s2); }
451*8a106958SDamjan Jovanovic
452*8a106958SDamjan Jovanovic inline int
compare(const String & i_s1,const char * i_s2)453*8a106958SDamjan Jovanovic compare( const String & i_s1,
454*8a106958SDamjan Jovanovic const char * i_s2 )
455*8a106958SDamjan Jovanovic { return strcmp(i_s1.c_str(), i_s2); }
456*8a106958SDamjan Jovanovic
457*8a106958SDamjan Jovanovic inline int
compare(const char * i_s1,const String & i_s2)458*8a106958SDamjan Jovanovic compare( const char * i_s1,
459*8a106958SDamjan Jovanovic const String & i_s2 )
460*8a106958SDamjan Jovanovic { return strcmp(i_s1, i_s2.c_str()); }
461*8a106958SDamjan Jovanovic
462*8a106958SDamjan Jovanovic inline int
compare(const char * i_s1,const char * i_s2)463*8a106958SDamjan Jovanovic compare( const char * i_s1,
464*8a106958SDamjan Jovanovic const char * i_s2 )
465*8a106958SDamjan Jovanovic { return strcmp(i_s1, i_s2); }
466*8a106958SDamjan Jovanovic
467*8a106958SDamjan Jovanovic inline int
compare(const char * i_s1,const char * i_s2,str::size i_nLength)468*8a106958SDamjan Jovanovic compare( const char * i_s1,
469*8a106958SDamjan Jovanovic const char * i_s2,
470*8a106958SDamjan Jovanovic str::size i_nLength )
471*8a106958SDamjan Jovanovic { return strncmp( i_s1, i_s2, i_nLength ); }
472*8a106958SDamjan Jovanovic
473*8a106958SDamjan Jovanovic inline int
compare(const CharOrder_Table & i_rOrder,const String & i_s1,const char * i_s2)474*8a106958SDamjan Jovanovic compare( const CharOrder_Table & i_rOrder,
475*8a106958SDamjan Jovanovic const String & i_s1,
476*8a106958SDamjan Jovanovic const char * i_s2 )
477*8a106958SDamjan Jovanovic { return compare( i_rOrder, i_s1.c_str(), i_s2 ); }
478*8a106958SDamjan Jovanovic
479*8a106958SDamjan Jovanovic inline int
compare(const CharOrder_Table & i_rOrder,const char * i_s1,const String & i_s2)480*8a106958SDamjan Jovanovic compare( const CharOrder_Table & i_rOrder,
481*8a106958SDamjan Jovanovic const char * i_s1,
482*8a106958SDamjan Jovanovic const String & i_s2 )
483*8a106958SDamjan Jovanovic { return compare( i_rOrder, i_s1, i_s2.c_str() ); }
484*8a106958SDamjan Jovanovic
485*8a106958SDamjan Jovanovic
486*8a106958SDamjan Jovanovic } // namespace csv
487*8a106958SDamjan Jovanovic
488*8a106958SDamjan Jovanovic
489*8a106958SDamjan Jovanovic inline bool
operator ==(const csv::String & i_s1,const char * i_s2)490*8a106958SDamjan Jovanovic operator==( const csv::String & i_s1,
491*8a106958SDamjan Jovanovic const char * i_s2 )
492*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) == 0; }
493*8a106958SDamjan Jovanovic
494*8a106958SDamjan Jovanovic inline bool
operator !=(const csv::String & i_s1,const char * i_s2)495*8a106958SDamjan Jovanovic operator!=( const csv::String & i_s1,
496*8a106958SDamjan Jovanovic const char * i_s2 )
497*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) != 0; }
498*8a106958SDamjan Jovanovic
499*8a106958SDamjan Jovanovic inline bool
operator <(const csv::String & i_s1,const char * i_s2)500*8a106958SDamjan Jovanovic operator<( const csv::String & i_s1,
501*8a106958SDamjan Jovanovic const char * i_s2 )
502*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) < 0; }
503*8a106958SDamjan Jovanovic
504*8a106958SDamjan Jovanovic inline bool
operator >(const csv::String & i_s1,const char * i_s2)505*8a106958SDamjan Jovanovic operator>( const csv::String & i_s1,
506*8a106958SDamjan Jovanovic const char * i_s2 )
507*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) > 0; }
508*8a106958SDamjan Jovanovic
509*8a106958SDamjan Jovanovic inline bool
operator <=(const csv::String & i_s1,const char * i_s2)510*8a106958SDamjan Jovanovic operator<=( const csv::String & i_s1,
511*8a106958SDamjan Jovanovic const char * i_s2 )
512*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) <= 0; }
513*8a106958SDamjan Jovanovic
514*8a106958SDamjan Jovanovic inline bool
operator >=(const csv::String & i_s1,const char * i_s2)515*8a106958SDamjan Jovanovic operator>=( const csv::String & i_s1,
516*8a106958SDamjan Jovanovic const char * i_s2 )
517*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) >= 0; }
518*8a106958SDamjan Jovanovic
519*8a106958SDamjan Jovanovic
520*8a106958SDamjan Jovanovic inline bool
operator ==(const char * i_s1,const csv::String & i_s2)521*8a106958SDamjan Jovanovic operator==( const char * i_s1,
522*8a106958SDamjan Jovanovic const csv::String & i_s2 )
523*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) == 0; }
524*8a106958SDamjan Jovanovic
525*8a106958SDamjan Jovanovic inline bool
operator !=(const char * i_s1,const csv::String & i_s2)526*8a106958SDamjan Jovanovic operator!=( const char * i_s1,
527*8a106958SDamjan Jovanovic const csv::String & i_s2 )
528*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) != 0; }
529*8a106958SDamjan Jovanovic
530*8a106958SDamjan Jovanovic inline bool
operator <(const char * i_s1,const csv::String & i_s2)531*8a106958SDamjan Jovanovic operator<( const char * i_s1,
532*8a106958SDamjan Jovanovic const csv::String & i_s2 )
533*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) < 0; }
534*8a106958SDamjan Jovanovic
535*8a106958SDamjan Jovanovic inline bool
operator >(const char * i_s1,const csv::String & i_s2)536*8a106958SDamjan Jovanovic operator>( const char * i_s1,
537*8a106958SDamjan Jovanovic const csv::String & i_s2 )
538*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) > 0; }
539*8a106958SDamjan Jovanovic
540*8a106958SDamjan Jovanovic inline bool
operator <=(const char * i_s1,const csv::String & i_s2)541*8a106958SDamjan Jovanovic operator<=( const char * i_s1,
542*8a106958SDamjan Jovanovic const csv::String & i_s2 )
543*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) <= 0; }
544*8a106958SDamjan Jovanovic
545*8a106958SDamjan Jovanovic inline bool
operator >=(const char * i_s1,const csv::String & i_s2)546*8a106958SDamjan Jovanovic operator>=( const char * i_s1,
547*8a106958SDamjan Jovanovic const csv::String & i_s2 )
548*8a106958SDamjan Jovanovic { return csv::compare( i_s1, i_s2 ) >= 0; }
549*8a106958SDamjan Jovanovic
550*8a106958SDamjan Jovanovic
551*8a106958SDamjan Jovanovic //************ global stream operators **************//
552*8a106958SDamjan Jovanovic
553*8a106958SDamjan Jovanovic
554*8a106958SDamjan Jovanovic inline csv::ostream &
operator <<(csv::ostream & o_rOut,const csv::String & i_rSrc)555*8a106958SDamjan Jovanovic operator<<( csv::ostream & o_rOut,
556*8a106958SDamjan Jovanovic const csv::String & i_rSrc )
557*8a106958SDamjan Jovanovic { o_rOut << i_rSrc.c_str(); return o_rOut; }
558*8a106958SDamjan Jovanovic
559*8a106958SDamjan Jovanovic
560*8a106958SDamjan Jovanovic
561*8a106958SDamjan Jovanovic
562*8a106958SDamjan Jovanovic
563*8a106958SDamjan Jovanovic //****************** typedefs *********************//
564*8a106958SDamjan Jovanovic
565*8a106958SDamjan Jovanovic namespace csv
566*8a106958SDamjan Jovanovic {
567*8a106958SDamjan Jovanovic
568*8a106958SDamjan Jovanovic typedef std::vector<String> StringVector;
569*8a106958SDamjan Jovanovic
570*8a106958SDamjan Jovanovic }
571*8a106958SDamjan Jovanovic
572*8a106958SDamjan Jovanovic
573*8a106958SDamjan Jovanovic
574*8a106958SDamjan Jovanovic
575*8a106958SDamjan Jovanovic #endif
576