xref: /trunk/main/autodoc/inc/cosv/streamstr.hxx (revision 11c03c6d381fea19f0fea13ae5a371ba50bad241)
1*11c03c6dSDamjan Jovanovic /**************************************************************
2*11c03c6dSDamjan Jovanovic  *
3*11c03c6dSDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
4*11c03c6dSDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
5*11c03c6dSDamjan Jovanovic  * distributed with this work for additional information
6*11c03c6dSDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
7*11c03c6dSDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
8*11c03c6dSDamjan Jovanovic  * "License"); you may not use this file except in compliance
9*11c03c6dSDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
10*11c03c6dSDamjan Jovanovic  *
11*11c03c6dSDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
12*11c03c6dSDamjan Jovanovic  *
13*11c03c6dSDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
14*11c03c6dSDamjan Jovanovic  * software distributed under the License is distributed on an
15*11c03c6dSDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*11c03c6dSDamjan Jovanovic  * KIND, either express or implied.  See the License for the
17*11c03c6dSDamjan Jovanovic  * specific language governing permissions and limitations
18*11c03c6dSDamjan Jovanovic  * under the License.
19*11c03c6dSDamjan Jovanovic  *
20*11c03c6dSDamjan Jovanovic  *************************************************************/
21*11c03c6dSDamjan Jovanovic 
22*11c03c6dSDamjan Jovanovic 
23*11c03c6dSDamjan Jovanovic 
24*11c03c6dSDamjan Jovanovic #ifndef CSV_STREAMSTR_HXX
25*11c03c6dSDamjan Jovanovic #define CSV_STREAMSTR_HXX
26*11c03c6dSDamjan Jovanovic 
27*11c03c6dSDamjan Jovanovic // BASE CLASSES
28*11c03c6dSDamjan Jovanovic #include <cosv/bstream.hxx>
29*11c03c6dSDamjan Jovanovic // USED SERVICES
30*11c03c6dSDamjan Jovanovic #include <cosv/str_types.hxx>
31*11c03c6dSDamjan Jovanovic #include <string.h>
32*11c03c6dSDamjan Jovanovic 
33*11c03c6dSDamjan Jovanovic 
34*11c03c6dSDamjan Jovanovic 
35*11c03c6dSDamjan Jovanovic 
36*11c03c6dSDamjan Jovanovic namespace csv
37*11c03c6dSDamjan Jovanovic {
38*11c03c6dSDamjan Jovanovic     class String;
39*11c03c6dSDamjan Jovanovic 
40*11c03c6dSDamjan Jovanovic 
41*11c03c6dSDamjan Jovanovic void c_str();   // Dummy needed for StreamStr::operator<<(StreamStr::F_CSTR);
42*11c03c6dSDamjan Jovanovic 
43*11c03c6dSDamjan Jovanovic 
44*11c03c6dSDamjan Jovanovic /** A string buffer class for all kinds of string manipulation.
45*11c03c6dSDamjan Jovanovic */
46*11c03c6dSDamjan Jovanovic class StreamStr : public bostream
47*11c03c6dSDamjan Jovanovic {
48*11c03c6dSDamjan Jovanovic    public:
49*11c03c6dSDamjan Jovanovic     typedef StreamStr       self;
50*11c03c6dSDamjan Jovanovic 
51*11c03c6dSDamjan Jovanovic     typedef str::size           size_type;
52*11c03c6dSDamjan Jovanovic     typedef str::position       position_type;
53*11c03c6dSDamjan Jovanovic     typedef intt                seek_type;
54*11c03c6dSDamjan Jovanovic     typedef str::insert_mode    insert_mode;
55*11c03c6dSDamjan Jovanovic 
56*11c03c6dSDamjan Jovanovic     typedef const char *        const_iterator;
57*11c03c6dSDamjan Jovanovic     typedef char *              iterator;
58*11c03c6dSDamjan Jovanovic 
59*11c03c6dSDamjan Jovanovic     typedef void (*F_CSTR)();
60*11c03c6dSDamjan Jovanovic 
61*11c03c6dSDamjan Jovanovic 
62*11c03c6dSDamjan Jovanovic     /** Represents an area within a string.
63*11c03c6dSDamjan Jovanovic     */
64*11c03c6dSDamjan Jovanovic     struct Area
65*11c03c6dSDamjan Jovanovic     {
66*11c03c6dSDamjan Jovanovic         typedef str::size           size_type;
67*11c03c6dSDamjan Jovanovic 
68*11c03c6dSDamjan Jovanovic                         Area(
69*11c03c6dSDamjan Jovanovic                             const char *        i_str = "",
70*11c03c6dSDamjan Jovanovic                             size_type           i_nLength = str::maxsize )
71*11c03c6dSDamjan Jovanovic                                                 :   sStr(i_str),
72*11c03c6dSDamjan Jovanovic                                                     nLength( i_nLength == str::maxsize
73*11c03c6dSDamjan Jovanovic                                                                 ?   strlen(i_str)
74*11c03c6dSDamjan Jovanovic                                                                 :   i_nLength ) {}
75*11c03c6dSDamjan Jovanovic         const char *    sStr;
76*11c03c6dSDamjan Jovanovic         size_type       nLength;
77*11c03c6dSDamjan Jovanovic     };
78*11c03c6dSDamjan Jovanovic 
79*11c03c6dSDamjan Jovanovic     // LIFECYCLE
80*11c03c6dSDamjan Jovanovic                         StreamStr(
81*11c03c6dSDamjan Jovanovic                             size_type           i_nCapacity );
82*11c03c6dSDamjan Jovanovic                         StreamStr(
83*11c03c6dSDamjan Jovanovic                             const char *        i_sInitStr,
84*11c03c6dSDamjan Jovanovic                             size_type           i_nCapacity ); /// Only used if > strlen(i_sInitStr).
85*11c03c6dSDamjan Jovanovic                         StreamStr(
86*11c03c6dSDamjan Jovanovic                             size_type           i_nGuessedCapacity,
87*11c03c6dSDamjan Jovanovic                             const char *        str1,   // [!= 0]
88*11c03c6dSDamjan Jovanovic                             const char *        str2,   // [!= 0]
89*11c03c6dSDamjan Jovanovic                             ...                 );      // Has to end with NIL .
90*11c03c6dSDamjan Jovanovic                         StreamStr(
91*11c03c6dSDamjan Jovanovic                             csv::bstream &      i_source );
92*11c03c6dSDamjan Jovanovic     /// Copies also insert_mode and current position.
93*11c03c6dSDamjan Jovanovic                         StreamStr(
94*11c03c6dSDamjan Jovanovic                             const self &        i_rOther );
95*11c03c6dSDamjan Jovanovic                         ~StreamStr();
96*11c03c6dSDamjan Jovanovic 
97*11c03c6dSDamjan Jovanovic     // OPERATORS
98*11c03c6dSDamjan Jovanovic     /// Copies also insert_mode and current position.
99*11c03c6dSDamjan Jovanovic     self &              operator=(
100*11c03c6dSDamjan Jovanovic                             const self &        i_rOther );
101*11c03c6dSDamjan Jovanovic 
102*11c03c6dSDamjan Jovanovic     self &              operator<<(
103*11c03c6dSDamjan Jovanovic                             const char *        i_s );
104*11c03c6dSDamjan Jovanovic     self &              operator<<(
105*11c03c6dSDamjan Jovanovic                             const String &      i_s );
106*11c03c6dSDamjan Jovanovic     self &              operator<<(
107*11c03c6dSDamjan Jovanovic                             char                i_c );
108*11c03c6dSDamjan Jovanovic     self &              operator<<(
109*11c03c6dSDamjan Jovanovic                             unsigned char       i_c );
110*11c03c6dSDamjan Jovanovic     self &              operator<<(
111*11c03c6dSDamjan Jovanovic                             signed char         i_c );
112*11c03c6dSDamjan Jovanovic 
113*11c03c6dSDamjan Jovanovic     self &              operator<<(
114*11c03c6dSDamjan Jovanovic                             short               i_n );
115*11c03c6dSDamjan Jovanovic     self &              operator<<(
116*11c03c6dSDamjan Jovanovic                             unsigned short      i_n );
117*11c03c6dSDamjan Jovanovic     self &              operator<<(
118*11c03c6dSDamjan Jovanovic                             int                 i_n );
119*11c03c6dSDamjan Jovanovic     self &              operator<<(
120*11c03c6dSDamjan Jovanovic                             unsigned int        i_n );
121*11c03c6dSDamjan Jovanovic     self &              operator<<(
122*11c03c6dSDamjan Jovanovic                             long                i_n );
123*11c03c6dSDamjan Jovanovic     self &              operator<<(
124*11c03c6dSDamjan Jovanovic                             unsigned long       i_n );
125*11c03c6dSDamjan Jovanovic 
126*11c03c6dSDamjan Jovanovic     self &              operator<<(
127*11c03c6dSDamjan Jovanovic                             float               i_n );
128*11c03c6dSDamjan Jovanovic     self &              operator<<(
129*11c03c6dSDamjan Jovanovic                             double              i_n );
130*11c03c6dSDamjan Jovanovic 
131*11c03c6dSDamjan Jovanovic     /** This operator is used to finish a sequence of streaming
132*11c03c6dSDamjan Jovanovic         oeprators by returning the c-string of the complete string.
133*11c03c6dSDamjan Jovanovic 
134*11c03c6dSDamjan Jovanovic         @return The same as ->c_str().
135*11c03c6dSDamjan Jovanovic 
136*11c03c6dSDamjan Jovanovic         @example
137*11c03c6dSDamjan Jovanovic         csv::StreamStr  s(100);
138*11c03c6dSDamjan Jovanovic         const char *
139*11c03c6dSDamjan Jovanovic             fullname =  s << qualifier() << "::" << name() << csv::c_str;
140*11c03c6dSDamjan Jovanovic     */
141*11c03c6dSDamjan Jovanovic     const char *        operator<<(
142*11c03c6dSDamjan Jovanovic                             F_CSTR              i_f );
143*11c03c6dSDamjan Jovanovic 
144*11c03c6dSDamjan Jovanovic     const char &        operator[](
145*11c03c6dSDamjan Jovanovic                             position_type       i_nPosition ) const;
146*11c03c6dSDamjan Jovanovic     char &              operator[](
147*11c03c6dSDamjan Jovanovic                             position_type       i_nPosition );
148*11c03c6dSDamjan Jovanovic 
149*11c03c6dSDamjan Jovanovic     //  OPERATIONS
150*11c03c6dSDamjan Jovanovic     void                resize(
151*11c03c6dSDamjan Jovanovic                             size_type           i_nMinimumCapacity );
152*11c03c6dSDamjan Jovanovic 
153*11c03c6dSDamjan Jovanovic     void                clear();
154*11c03c6dSDamjan Jovanovic     void                swap(
155*11c03c6dSDamjan Jovanovic                             StreamStr &         io_swap );
156*11c03c6dSDamjan Jovanovic 
157*11c03c6dSDamjan Jovanovic     /** Sets start point for the next operator<<() call.
158*11c03c6dSDamjan Jovanovic         if the intended position is not reachable, nothing happens.
159*11c03c6dSDamjan Jovanovic     */
160*11c03c6dSDamjan Jovanovic     self &              seekp(
161*11c03c6dSDamjan Jovanovic                             seek_type           i_nCount,
162*11c03c6dSDamjan Jovanovic                             seek_dir            i_eDirection = ::csv::beg );
163*11c03c6dSDamjan Jovanovic     self &              reset()                 { return seekp(0); }
164*11c03c6dSDamjan Jovanovic     /** Sets the insertion mode of all and only the operator<<() calls.
165*11c03c6dSDamjan Jovanovic 
166*11c03c6dSDamjan Jovanovic         Default is str::overwrite:
167*11c03c6dSDamjan Jovanovic         str::overwrite: seekp() always sets the cur end of the string.
168*11c03c6dSDamjan Jovanovic                         operator<<() calls push the end of the string forward.
169*11c03c6dSDamjan Jovanovic         str::insert:    seekp() only sets the insertion point.
170*11c03c6dSDamjan Jovanovic                         operator<<() calls insert their text at the tellp()
171*11c03c6dSDamjan Jovanovic                         position and keep the rest of the string. tellp() is
172*11c03c6dSDamjan Jovanovic                         then after the inserted text, on the beginning of the
173*11c03c6dSDamjan Jovanovic                         rest of the string.
174*11c03c6dSDamjan Jovanovic     */
175*11c03c6dSDamjan Jovanovic     self &              set_insert_mode(
176*11c03c6dSDamjan Jovanovic                             insert_mode         i_eMode );
177*11c03c6dSDamjan Jovanovic 
178*11c03c6dSDamjan Jovanovic     void                push_front(
179*11c03c6dSDamjan Jovanovic                             const char *        i_str );
180*11c03c6dSDamjan Jovanovic     void                push_front(
181*11c03c6dSDamjan Jovanovic                             char                i_c );
182*11c03c6dSDamjan Jovanovic     void                push_back(
183*11c03c6dSDamjan Jovanovic                             const char *        i_str );
184*11c03c6dSDamjan Jovanovic     void                push_back(
185*11c03c6dSDamjan Jovanovic                             char                i_c );
186*11c03c6dSDamjan Jovanovic     void                pop_front(
187*11c03c6dSDamjan Jovanovic                             size_type           i_nCount );
188*11c03c6dSDamjan Jovanovic     void                pop_back(
189*11c03c6dSDamjan Jovanovic                             size_type           i_nCount );
190*11c03c6dSDamjan Jovanovic 
191*11c03c6dSDamjan Jovanovic     /// Works like operator<<(). Does the same as Perl's join().
192*11c03c6dSDamjan Jovanovic     self &              operator_join(
193*11c03c6dSDamjan Jovanovic                             std::vector<String>::const_iterator
194*11c03c6dSDamjan Jovanovic                                                 i_rBegin,
195*11c03c6dSDamjan Jovanovic                             std::vector<String>::const_iterator
196*11c03c6dSDamjan Jovanovic                                                 i_rEnd,
197*11c03c6dSDamjan Jovanovic                             const char *        i_sLink );
198*11c03c6dSDamjan Jovanovic     /// Works like operator<<()
199*11c03c6dSDamjan Jovanovic     self &              operator_add_substr(
200*11c03c6dSDamjan Jovanovic                             const char *        i_sText,
201*11c03c6dSDamjan Jovanovic                             size_type           i_nLength );
202*11c03c6dSDamjan Jovanovic     /// Works like operator<<()
203*11c03c6dSDamjan Jovanovic     self &              operator_add_token(
204*11c03c6dSDamjan Jovanovic                             const char *        i_sText,
205*11c03c6dSDamjan Jovanovic                             char                i_cDelimiter );
206*11c03c6dSDamjan Jovanovic     /// Works like operator<<()
207*11c03c6dSDamjan Jovanovic     self &              operator_read_line(
208*11c03c6dSDamjan Jovanovic                             bstream &           i_src );
209*11c03c6dSDamjan Jovanovic 
210*11c03c6dSDamjan Jovanovic     void                strip_front(
211*11c03c6dSDamjan Jovanovic                             char                i_cToRemove );
212*11c03c6dSDamjan Jovanovic     void                strip_back(
213*11c03c6dSDamjan Jovanovic                             char                i_cToRemove );
214*11c03c6dSDamjan Jovanovic     void                strip_frontback(
215*11c03c6dSDamjan Jovanovic                             char                i_cToRemove );
216*11c03c6dSDamjan Jovanovic     void                strip_front_whitespace();    /// removes space, tab and crlf.
217*11c03c6dSDamjan Jovanovic     void                strip_back_whitespace();
218*11c03c6dSDamjan Jovanovic     void                strip_frontback_whitespace();
219*11c03c6dSDamjan Jovanovic 
220*11c03c6dSDamjan Jovanovic     /** @precond i_begin is valid
221*11c03c6dSDamjan Jovanovic         @precond i_end is valid
222*11c03c6dSDamjan Jovanovic         @precond i_end >= i_begin
223*11c03c6dSDamjan Jovanovic     */
224*11c03c6dSDamjan Jovanovic     void                remove(
225*11c03c6dSDamjan Jovanovic                             iterator            i_begin,
226*11c03c6dSDamjan Jovanovic                             iterator            i_end );
227*11c03c6dSDamjan Jovanovic     void                replace(
228*11c03c6dSDamjan Jovanovic                             position_type       i_nStart,
229*11c03c6dSDamjan Jovanovic                             size_type           i_nSize,
230*11c03c6dSDamjan Jovanovic                             Area                i_aReplacement );
231*11c03c6dSDamjan Jovanovic 
232*11c03c6dSDamjan Jovanovic     void                replace_all(
233*11c03c6dSDamjan Jovanovic                             char                i_cCarToSearch,
234*11c03c6dSDamjan Jovanovic                             char                i_cReplacement );
235*11c03c6dSDamjan Jovanovic     void                replace_all(
236*11c03c6dSDamjan Jovanovic                             Area                i_aStrToSearch,
237*11c03c6dSDamjan Jovanovic                             Area                i_aReplacement );
238*11c03c6dSDamjan Jovanovic 
239*11c03c6dSDamjan Jovanovic     StreamStr &         to_lower(
240*11c03c6dSDamjan Jovanovic                             position_type       i_nStart = 0,
241*11c03c6dSDamjan Jovanovic                             size_type           i_nLength = str::maxsize );
242*11c03c6dSDamjan Jovanovic     StreamStr &         to_upper(
243*11c03c6dSDamjan Jovanovic                             position_type       i_nStart = 0,
244*11c03c6dSDamjan Jovanovic                             size_type           i_nLength = str::maxsize );
245*11c03c6dSDamjan Jovanovic 
246*11c03c6dSDamjan Jovanovic     // INQUIRY
247*11c03c6dSDamjan Jovanovic     const char *        c_str() const;
248*11c03c6dSDamjan Jovanovic     const char *        data() const;
249*11c03c6dSDamjan Jovanovic 
250*11c03c6dSDamjan Jovanovic     bool                empty() const;
251*11c03c6dSDamjan Jovanovic     size_type           size() const;
252*11c03c6dSDamjan Jovanovic     size_type           length() const;
253*11c03c6dSDamjan Jovanovic 
254*11c03c6dSDamjan Jovanovic     size_type           capacity() const;
255*11c03c6dSDamjan Jovanovic 
256*11c03c6dSDamjan Jovanovic     position_type       tellp() const;
257*11c03c6dSDamjan Jovanovic 
258*11c03c6dSDamjan Jovanovic     const_iterator      begin() const;
259*11c03c6dSDamjan Jovanovic     const_iterator      cur() const;
260*11c03c6dSDamjan Jovanovic     const_iterator      end() const;
261*11c03c6dSDamjan Jovanovic 
262*11c03c6dSDamjan Jovanovic     size_type           token_count(
263*11c03c6dSDamjan Jovanovic                             char                i_cSplit ) const;
264*11c03c6dSDamjan Jovanovic     String              token(
265*11c03c6dSDamjan Jovanovic                             position_type       i_nNr,      /// Starting with 0.
266*11c03c6dSDamjan Jovanovic                             char                i_cSpli ) const;
267*11c03c6dSDamjan Jovanovic 
268*11c03c6dSDamjan Jovanovic     // ACCESS
269*11c03c6dSDamjan Jovanovic     iterator            begin();
270*11c03c6dSDamjan Jovanovic     iterator            cur();
271*11c03c6dSDamjan Jovanovic     iterator            end();
272*11c03c6dSDamjan Jovanovic 
273*11c03c6dSDamjan Jovanovic    private:
274*11c03c6dSDamjan Jovanovic     // Interface bostream
275*11c03c6dSDamjan Jovanovic     virtual UINT32      do_write(
276*11c03c6dSDamjan Jovanovic                             const void *    i_pSrc,
277*11c03c6dSDamjan Jovanovic                             UINT32          i_nNrofBytes);
278*11c03c6dSDamjan Jovanovic     // Locals
279*11c03c6dSDamjan Jovanovic     void                ProvideAddingSize(
280*11c03c6dSDamjan Jovanovic                             size_type           i_nSize2Add );
281*11c03c6dSDamjan Jovanovic     /// Resizes with the factor 2.0 (under 128), 1.5 or until i_nMinimumCapacity, whatever is bigger.
282*11c03c6dSDamjan Jovanovic     void                Resize(
283*11c03c6dSDamjan Jovanovic                             size_type           i_nMinimumCapacity = 0 );
284*11c03c6dSDamjan Jovanovic     void                Advance(
285*11c03c6dSDamjan Jovanovic                             size_type           i_nAddedSize );
286*11c03c6dSDamjan Jovanovic     void                MoveData(
287*11c03c6dSDamjan Jovanovic                             char *              i_pStart,
288*11c03c6dSDamjan Jovanovic                             char *              i_pEnd,
289*11c03c6dSDamjan Jovanovic                             seek_type           i_nDiff );
290*11c03c6dSDamjan Jovanovic     // DATA
291*11c03c6dSDamjan Jovanovic     size_type           nCapacity1;     /// Capacity of characters to contain + 1 for terminating 0.
292*11c03c6dSDamjan Jovanovic     DYN char *          dpData;
293*11c03c6dSDamjan Jovanovic     char *              pEnd;
294*11c03c6dSDamjan Jovanovic     char *              pCur;
295*11c03c6dSDamjan Jovanovic     insert_mode         eMode;
296*11c03c6dSDamjan Jovanovic };
297*11c03c6dSDamjan Jovanovic 
298*11c03c6dSDamjan Jovanovic 
299*11c03c6dSDamjan Jovanovic 
300*11c03c6dSDamjan Jovanovic class StreamStrLock
301*11c03c6dSDamjan Jovanovic {
302*11c03c6dSDamjan Jovanovic   public:
303*11c03c6dSDamjan Jovanovic                         StreamStrLock(
304*11c03c6dSDamjan Jovanovic                             uintt               i_nMinimalSize );
305*11c03c6dSDamjan Jovanovic                         ~StreamStrLock();
306*11c03c6dSDamjan Jovanovic 
307*11c03c6dSDamjan Jovanovic     StreamStr &         operator()()            { return *pStr; }
308*11c03c6dSDamjan Jovanovic 
309*11c03c6dSDamjan Jovanovic   private:
310*11c03c6dSDamjan Jovanovic     StreamStr *         pStr;
311*11c03c6dSDamjan Jovanovic };
312*11c03c6dSDamjan Jovanovic 
313*11c03c6dSDamjan Jovanovic /** Splits a string into tokens by whitespace.
314*11c03c6dSDamjan Jovanovic 
315*11c03c6dSDamjan Jovanovic     The tokens are added to the end of o_list.
316*11c03c6dSDamjan Jovanovic */
317*11c03c6dSDamjan Jovanovic void                Split(
318*11c03c6dSDamjan Jovanovic                         std::vector<String> &
319*11c03c6dSDamjan Jovanovic                                             o_list,
320*11c03c6dSDamjan Jovanovic                         const char *        i_text );
321*11c03c6dSDamjan Jovanovic inline void         Join(
322*11c03c6dSDamjan Jovanovic                         StreamStr &         o_text,
323*11c03c6dSDamjan Jovanovic                         std::vector<String> &
324*11c03c6dSDamjan Jovanovic                                             i_list,
325*11c03c6dSDamjan Jovanovic                         const char *        i_sLink = " ");
326*11c03c6dSDamjan Jovanovic 
327*11c03c6dSDamjan Jovanovic // IMPLEMENTATION
328*11c03c6dSDamjan Jovanovic 
329*11c03c6dSDamjan Jovanovic inline const char *
330*11c03c6dSDamjan Jovanovic StreamStr::operator<<( F_CSTR )
331*11c03c6dSDamjan Jovanovic     { return dpData; }
332*11c03c6dSDamjan Jovanovic inline void
333*11c03c6dSDamjan Jovanovic StreamStr::clear()
334*11c03c6dSDamjan Jovanovic     { pEnd = pCur = dpData; *pEnd = '\0'; }
335*11c03c6dSDamjan Jovanovic inline const char *
336*11c03c6dSDamjan Jovanovic StreamStr::c_str() const
337*11c03c6dSDamjan Jovanovic     { return dpData; }
338*11c03c6dSDamjan Jovanovic inline const char *
339*11c03c6dSDamjan Jovanovic StreamStr::data() const
340*11c03c6dSDamjan Jovanovic     { return dpData; }
341*11c03c6dSDamjan Jovanovic inline bool
342*11c03c6dSDamjan Jovanovic StreamStr::empty() const
343*11c03c6dSDamjan Jovanovic     { return dpData == pEnd; }
344*11c03c6dSDamjan Jovanovic inline StreamStr::size_type
345*11c03c6dSDamjan Jovanovic StreamStr::size() const
346*11c03c6dSDamjan Jovanovic     { return pEnd - dpData; }
347*11c03c6dSDamjan Jovanovic inline StreamStr::size_type
348*11c03c6dSDamjan Jovanovic StreamStr::length() const
349*11c03c6dSDamjan Jovanovic     { return size(); }
350*11c03c6dSDamjan Jovanovic inline StreamStr::size_type
351*11c03c6dSDamjan Jovanovic StreamStr::capacity() const
352*11c03c6dSDamjan Jovanovic     { return nCapacity1-1; }
353*11c03c6dSDamjan Jovanovic inline StreamStr::position_type
354*11c03c6dSDamjan Jovanovic StreamStr::tellp() const
355*11c03c6dSDamjan Jovanovic     { return size_type(pCur-dpData); }
356*11c03c6dSDamjan Jovanovic inline StreamStr::const_iterator
357*11c03c6dSDamjan Jovanovic StreamStr::begin() const
358*11c03c6dSDamjan Jovanovic     { return dpData; }
359*11c03c6dSDamjan Jovanovic inline StreamStr::const_iterator
360*11c03c6dSDamjan Jovanovic StreamStr::cur() const
361*11c03c6dSDamjan Jovanovic     { return pCur; }
362*11c03c6dSDamjan Jovanovic inline StreamStr::const_iterator
363*11c03c6dSDamjan Jovanovic StreamStr::end() const
364*11c03c6dSDamjan Jovanovic     { return pEnd; }
365*11c03c6dSDamjan Jovanovic inline StreamStr::iterator
366*11c03c6dSDamjan Jovanovic StreamStr::begin()
367*11c03c6dSDamjan Jovanovic     { return dpData; }
368*11c03c6dSDamjan Jovanovic inline StreamStr::iterator
369*11c03c6dSDamjan Jovanovic StreamStr::cur()
370*11c03c6dSDamjan Jovanovic     { return pCur; }
371*11c03c6dSDamjan Jovanovic inline StreamStr::iterator
372*11c03c6dSDamjan Jovanovic StreamStr::end()
373*11c03c6dSDamjan Jovanovic     { return pEnd; }
374*11c03c6dSDamjan Jovanovic 
375*11c03c6dSDamjan Jovanovic inline void
376*11c03c6dSDamjan Jovanovic Join( StreamStr &           o_text,
377*11c03c6dSDamjan Jovanovic       std::vector<String> & i_list,
378*11c03c6dSDamjan Jovanovic       const char *          i_sLink )
379*11c03c6dSDamjan Jovanovic {
380*11c03c6dSDamjan Jovanovic     o_text.operator_join(i_list.begin(),i_list.end(),i_sLink);
381*11c03c6dSDamjan Jovanovic }
382*11c03c6dSDamjan Jovanovic 
383*11c03c6dSDamjan Jovanovic 
384*11c03c6dSDamjan Jovanovic 
385*11c03c6dSDamjan Jovanovic 
386*11c03c6dSDamjan Jovanovic }   // namespace csv
387*11c03c6dSDamjan Jovanovic #endif
388