xref: /trunk/main/autodoc/inc/cosv/streamstr.hxx (revision 914d351e5f5b84e4342a86d6ab8d4aca7308b9bd)
111c03c6dSDamjan Jovanovic /**************************************************************
211c03c6dSDamjan Jovanovic  *
311c03c6dSDamjan Jovanovic  * Licensed to the Apache Software Foundation (ASF) under one
411c03c6dSDamjan Jovanovic  * or more contributor license agreements.  See the NOTICE file
511c03c6dSDamjan Jovanovic  * distributed with this work for additional information
611c03c6dSDamjan Jovanovic  * regarding copyright ownership.  The ASF licenses this file
711c03c6dSDamjan Jovanovic  * to you under the Apache License, Version 2.0 (the
811c03c6dSDamjan Jovanovic  * "License"); you may not use this file except in compliance
911c03c6dSDamjan Jovanovic  * with the License.  You may obtain a copy of the License at
1011c03c6dSDamjan Jovanovic  *
1111c03c6dSDamjan Jovanovic  *   http://www.apache.org/licenses/LICENSE-2.0
1211c03c6dSDamjan Jovanovic  *
1311c03c6dSDamjan Jovanovic  * Unless required by applicable law or agreed to in writing,
1411c03c6dSDamjan Jovanovic  * software distributed under the License is distributed on an
1511c03c6dSDamjan Jovanovic  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1611c03c6dSDamjan Jovanovic  * KIND, either express or implied.  See the License for the
1711c03c6dSDamjan Jovanovic  * specific language governing permissions and limitations
1811c03c6dSDamjan Jovanovic  * under the License.
1911c03c6dSDamjan Jovanovic  *
2011c03c6dSDamjan Jovanovic  *************************************************************/
2111c03c6dSDamjan Jovanovic 
2211c03c6dSDamjan Jovanovic 
2311c03c6dSDamjan Jovanovic 
2411c03c6dSDamjan Jovanovic #ifndef CSV_STREAMSTR_HXX
2511c03c6dSDamjan Jovanovic #define CSV_STREAMSTR_HXX
2611c03c6dSDamjan Jovanovic 
2711c03c6dSDamjan Jovanovic // BASE CLASSES
2811c03c6dSDamjan Jovanovic #include <cosv/bstream.hxx>
2911c03c6dSDamjan Jovanovic // USED SERVICES
3011c03c6dSDamjan Jovanovic #include <cosv/str_types.hxx>
3111c03c6dSDamjan Jovanovic #include <string.h>
3211c03c6dSDamjan Jovanovic 
3311c03c6dSDamjan Jovanovic 
3411c03c6dSDamjan Jovanovic 
3511c03c6dSDamjan Jovanovic 
3611c03c6dSDamjan Jovanovic namespace csv
3711c03c6dSDamjan Jovanovic {
3811c03c6dSDamjan Jovanovic     class String;
3911c03c6dSDamjan Jovanovic 
4011c03c6dSDamjan Jovanovic 
4111c03c6dSDamjan Jovanovic void c_str();   // Dummy needed for StreamStr::operator<<(StreamStr::F_CSTR);
4211c03c6dSDamjan Jovanovic 
4311c03c6dSDamjan Jovanovic 
4411c03c6dSDamjan Jovanovic /** A string buffer class for all kinds of string manipulation.
4511c03c6dSDamjan Jovanovic */
4611c03c6dSDamjan Jovanovic class StreamStr : public bostream
4711c03c6dSDamjan Jovanovic {
4811c03c6dSDamjan Jovanovic    public:
4911c03c6dSDamjan Jovanovic     typedef StreamStr       self;
5011c03c6dSDamjan Jovanovic 
5111c03c6dSDamjan Jovanovic     typedef str::size           size_type;
5211c03c6dSDamjan Jovanovic     typedef str::position       position_type;
5311c03c6dSDamjan Jovanovic     typedef intt                seek_type;
5411c03c6dSDamjan Jovanovic     typedef str::insert_mode    insert_mode;
5511c03c6dSDamjan Jovanovic 
5611c03c6dSDamjan Jovanovic     typedef const char *        const_iterator;
5711c03c6dSDamjan Jovanovic     typedef char *              iterator;
5811c03c6dSDamjan Jovanovic 
5911c03c6dSDamjan Jovanovic     typedef void (*F_CSTR)();
6011c03c6dSDamjan Jovanovic 
6111c03c6dSDamjan Jovanovic 
6211c03c6dSDamjan Jovanovic     /** Represents an area within a string.
6311c03c6dSDamjan Jovanovic     */
6411c03c6dSDamjan Jovanovic     struct Area
6511c03c6dSDamjan Jovanovic     {
6611c03c6dSDamjan Jovanovic         typedef str::size           size_type;
6711c03c6dSDamjan Jovanovic 
Areacsv::StreamStr::Area6811c03c6dSDamjan Jovanovic                         Area(
6911c03c6dSDamjan Jovanovic                             const char *        i_str = "",
7011c03c6dSDamjan Jovanovic                             size_type           i_nLength = str::maxsize )
7111c03c6dSDamjan Jovanovic                                                 :   sStr(i_str),
7211c03c6dSDamjan Jovanovic                                                     nLength( i_nLength == str::maxsize
7311c03c6dSDamjan Jovanovic                                                                 ?   strlen(i_str)
7411c03c6dSDamjan Jovanovic                                                                 :   i_nLength ) {}
7511c03c6dSDamjan Jovanovic         const char *    sStr;
7611c03c6dSDamjan Jovanovic         size_type       nLength;
7711c03c6dSDamjan Jovanovic     };
7811c03c6dSDamjan Jovanovic 
7911c03c6dSDamjan Jovanovic     // LIFECYCLE
8011c03c6dSDamjan Jovanovic                         StreamStr(
8111c03c6dSDamjan Jovanovic                             size_type           i_nCapacity );
8211c03c6dSDamjan Jovanovic                         StreamStr(
8311c03c6dSDamjan Jovanovic                             const char *        i_sInitStr,
8411c03c6dSDamjan Jovanovic                             size_type           i_nCapacity ); /// Only used if > strlen(i_sInitStr).
8511c03c6dSDamjan Jovanovic                         StreamStr(
8611c03c6dSDamjan Jovanovic                             size_type           i_nGuessedCapacity,
8711c03c6dSDamjan Jovanovic                             const char *        str1,   // [!= 0]
8811c03c6dSDamjan Jovanovic                             const char *        str2,   // [!= 0]
8911c03c6dSDamjan Jovanovic                             ...                 );      // Has to end with NIL .
9011c03c6dSDamjan Jovanovic                         StreamStr(
9111c03c6dSDamjan Jovanovic                             csv::bstream &      i_source );
9211c03c6dSDamjan Jovanovic     /// Copies also insert_mode and current position.
9311c03c6dSDamjan Jovanovic                         StreamStr(
9411c03c6dSDamjan Jovanovic                             const self &        i_rOther );
9511c03c6dSDamjan Jovanovic                         ~StreamStr();
9611c03c6dSDamjan Jovanovic 
9711c03c6dSDamjan Jovanovic     // OPERATORS
9811c03c6dSDamjan Jovanovic     /// Copies also insert_mode and current position.
9911c03c6dSDamjan Jovanovic     self &              operator=(
10011c03c6dSDamjan Jovanovic                             const self &        i_rOther );
10111c03c6dSDamjan Jovanovic 
10211c03c6dSDamjan Jovanovic     self &              operator<<(
10311c03c6dSDamjan Jovanovic                             const char *        i_s );
10411c03c6dSDamjan Jovanovic     self &              operator<<(
10511c03c6dSDamjan Jovanovic                             const String &      i_s );
10611c03c6dSDamjan Jovanovic     self &              operator<<(
10711c03c6dSDamjan Jovanovic                             char                i_c );
10811c03c6dSDamjan Jovanovic     self &              operator<<(
10911c03c6dSDamjan Jovanovic                             unsigned char       i_c );
11011c03c6dSDamjan Jovanovic     self &              operator<<(
11111c03c6dSDamjan Jovanovic                             signed char         i_c );
11211c03c6dSDamjan Jovanovic 
11311c03c6dSDamjan Jovanovic     self &              operator<<(
11411c03c6dSDamjan Jovanovic                             short               i_n );
11511c03c6dSDamjan Jovanovic     self &              operator<<(
11611c03c6dSDamjan Jovanovic                             unsigned short      i_n );
11711c03c6dSDamjan Jovanovic     self &              operator<<(
11811c03c6dSDamjan Jovanovic                             int                 i_n );
11911c03c6dSDamjan Jovanovic     self &              operator<<(
12011c03c6dSDamjan Jovanovic                             unsigned int        i_n );
12111c03c6dSDamjan Jovanovic     self &              operator<<(
12211c03c6dSDamjan Jovanovic                             long                i_n );
12311c03c6dSDamjan Jovanovic     self &              operator<<(
12411c03c6dSDamjan Jovanovic                             unsigned long       i_n );
12511c03c6dSDamjan Jovanovic 
12611c03c6dSDamjan Jovanovic     self &              operator<<(
12711c03c6dSDamjan Jovanovic                             float               i_n );
12811c03c6dSDamjan Jovanovic     self &              operator<<(
12911c03c6dSDamjan Jovanovic                             double              i_n );
13011c03c6dSDamjan Jovanovic 
13111c03c6dSDamjan Jovanovic     /** This operator is used to finish a sequence of streaming
132*0cb2ec91SJohn Bampton         operators by returning the c-string of the complete string.
13311c03c6dSDamjan Jovanovic 
13411c03c6dSDamjan Jovanovic         @return The same as ->c_str().
13511c03c6dSDamjan Jovanovic 
13611c03c6dSDamjan Jovanovic         @example
13711c03c6dSDamjan Jovanovic         csv::StreamStr  s(100);
13811c03c6dSDamjan Jovanovic         const char *
13911c03c6dSDamjan Jovanovic             fullname =  s << qualifier() << "::" << name() << csv::c_str;
14011c03c6dSDamjan Jovanovic     */
14111c03c6dSDamjan Jovanovic     const char *        operator<<(
14211c03c6dSDamjan Jovanovic                             F_CSTR              i_f );
14311c03c6dSDamjan Jovanovic 
14411c03c6dSDamjan Jovanovic     const char &        operator[](
14511c03c6dSDamjan Jovanovic                             position_type       i_nPosition ) const;
14611c03c6dSDamjan Jovanovic     char &              operator[](
14711c03c6dSDamjan Jovanovic                             position_type       i_nPosition );
14811c03c6dSDamjan Jovanovic 
14911c03c6dSDamjan Jovanovic     //  OPERATIONS
15011c03c6dSDamjan Jovanovic     void                resize(
15111c03c6dSDamjan Jovanovic                             size_type           i_nMinimumCapacity );
15211c03c6dSDamjan Jovanovic 
15311c03c6dSDamjan Jovanovic     void                clear();
15411c03c6dSDamjan Jovanovic     void                swap(
15511c03c6dSDamjan Jovanovic                             StreamStr &         io_swap );
15611c03c6dSDamjan Jovanovic 
15711c03c6dSDamjan Jovanovic     /** Sets start point for the next operator<<() call.
15811c03c6dSDamjan Jovanovic         if the intended position is not reachable, nothing happens.
15911c03c6dSDamjan Jovanovic     */
16011c03c6dSDamjan Jovanovic     self &              seekp(
16111c03c6dSDamjan Jovanovic                             seek_type           i_nCount,
16211c03c6dSDamjan Jovanovic                             seek_dir            i_eDirection = ::csv::beg );
reset()16311c03c6dSDamjan Jovanovic     self &              reset()                 { return seekp(0); }
16411c03c6dSDamjan Jovanovic     /** Sets the insertion mode of all and only the operator<<() calls.
16511c03c6dSDamjan Jovanovic 
16611c03c6dSDamjan Jovanovic         Default is str::overwrite:
16711c03c6dSDamjan Jovanovic         str::overwrite: seekp() always sets the cur end of the string.
16811c03c6dSDamjan Jovanovic                         operator<<() calls push the end of the string forward.
16911c03c6dSDamjan Jovanovic         str::insert:    seekp() only sets the insertion point.
17011c03c6dSDamjan Jovanovic                         operator<<() calls insert their text at the tellp()
17111c03c6dSDamjan Jovanovic                         position and keep the rest of the string. tellp() is
17211c03c6dSDamjan Jovanovic                         then after the inserted text, on the beginning of the
17311c03c6dSDamjan Jovanovic                         rest of the string.
17411c03c6dSDamjan Jovanovic     */
17511c03c6dSDamjan Jovanovic     self &              set_insert_mode(
17611c03c6dSDamjan Jovanovic                             insert_mode         i_eMode );
17711c03c6dSDamjan Jovanovic 
17811c03c6dSDamjan Jovanovic     void                push_front(
17911c03c6dSDamjan Jovanovic                             const char *        i_str );
18011c03c6dSDamjan Jovanovic     void                push_front(
18111c03c6dSDamjan Jovanovic                             char                i_c );
18211c03c6dSDamjan Jovanovic     void                push_back(
18311c03c6dSDamjan Jovanovic                             const char *        i_str );
18411c03c6dSDamjan Jovanovic     void                push_back(
18511c03c6dSDamjan Jovanovic                             char                i_c );
18611c03c6dSDamjan Jovanovic     void                pop_front(
18711c03c6dSDamjan Jovanovic                             size_type           i_nCount );
18811c03c6dSDamjan Jovanovic     void                pop_back(
18911c03c6dSDamjan Jovanovic                             size_type           i_nCount );
19011c03c6dSDamjan Jovanovic 
19111c03c6dSDamjan Jovanovic     /// Works like operator<<(). Does the same as Perl's join().
19211c03c6dSDamjan Jovanovic     self &              operator_join(
19311c03c6dSDamjan Jovanovic                             std::vector<String>::const_iterator
19411c03c6dSDamjan Jovanovic                                                 i_rBegin,
19511c03c6dSDamjan Jovanovic                             std::vector<String>::const_iterator
19611c03c6dSDamjan Jovanovic                                                 i_rEnd,
19711c03c6dSDamjan Jovanovic                             const char *        i_sLink );
19811c03c6dSDamjan Jovanovic     /// Works like operator<<()
19911c03c6dSDamjan Jovanovic     self &              operator_add_substr(
20011c03c6dSDamjan Jovanovic                             const char *        i_sText,
20111c03c6dSDamjan Jovanovic                             size_type           i_nLength );
20211c03c6dSDamjan Jovanovic     /// Works like operator<<()
20311c03c6dSDamjan Jovanovic     self &              operator_add_token(
20411c03c6dSDamjan Jovanovic                             const char *        i_sText,
20511c03c6dSDamjan Jovanovic                             char                i_cDelimiter );
20611c03c6dSDamjan Jovanovic     /// Works like operator<<()
20711c03c6dSDamjan Jovanovic     self &              operator_read_line(
20811c03c6dSDamjan Jovanovic                             bstream &           i_src );
20911c03c6dSDamjan Jovanovic 
21011c03c6dSDamjan Jovanovic     void                strip_front(
21111c03c6dSDamjan Jovanovic                             char                i_cToRemove );
21211c03c6dSDamjan Jovanovic     void                strip_back(
21311c03c6dSDamjan Jovanovic                             char                i_cToRemove );
21411c03c6dSDamjan Jovanovic     void                strip_frontback(
21511c03c6dSDamjan Jovanovic                             char                i_cToRemove );
21611c03c6dSDamjan Jovanovic     void                strip_front_whitespace();    /// removes space, tab and crlf.
21711c03c6dSDamjan Jovanovic     void                strip_back_whitespace();
21811c03c6dSDamjan Jovanovic     void                strip_frontback_whitespace();
21911c03c6dSDamjan Jovanovic 
22011c03c6dSDamjan Jovanovic     /** @precond i_begin is valid
22111c03c6dSDamjan Jovanovic         @precond i_end is valid
22211c03c6dSDamjan Jovanovic         @precond i_end >= i_begin
22311c03c6dSDamjan Jovanovic     */
22411c03c6dSDamjan Jovanovic     void                remove(
22511c03c6dSDamjan Jovanovic                             iterator            i_begin,
22611c03c6dSDamjan Jovanovic                             iterator            i_end );
22711c03c6dSDamjan Jovanovic     void                replace(
22811c03c6dSDamjan Jovanovic                             position_type       i_nStart,
22911c03c6dSDamjan Jovanovic                             size_type           i_nSize,
23011c03c6dSDamjan Jovanovic                             Area                i_aReplacement );
23111c03c6dSDamjan Jovanovic 
23211c03c6dSDamjan Jovanovic     void                replace_all(
23311c03c6dSDamjan Jovanovic                             char                i_cCarToSearch,
23411c03c6dSDamjan Jovanovic                             char                i_cReplacement );
23511c03c6dSDamjan Jovanovic     void                replace_all(
23611c03c6dSDamjan Jovanovic                             Area                i_aStrToSearch,
23711c03c6dSDamjan Jovanovic                             Area                i_aReplacement );
23811c03c6dSDamjan Jovanovic 
23911c03c6dSDamjan Jovanovic     StreamStr &         to_lower(
24011c03c6dSDamjan Jovanovic                             position_type       i_nStart = 0,
24111c03c6dSDamjan Jovanovic                             size_type           i_nLength = str::maxsize );
24211c03c6dSDamjan Jovanovic     StreamStr &         to_upper(
24311c03c6dSDamjan Jovanovic                             position_type       i_nStart = 0,
24411c03c6dSDamjan Jovanovic                             size_type           i_nLength = str::maxsize );
24511c03c6dSDamjan Jovanovic 
24611c03c6dSDamjan Jovanovic     // INQUIRY
24711c03c6dSDamjan Jovanovic     const char *        c_str() const;
24811c03c6dSDamjan Jovanovic     const char *        data() const;
24911c03c6dSDamjan Jovanovic 
25011c03c6dSDamjan Jovanovic     bool                empty() const;
25111c03c6dSDamjan Jovanovic     size_type           size() const;
25211c03c6dSDamjan Jovanovic     size_type           length() const;
25311c03c6dSDamjan Jovanovic 
25411c03c6dSDamjan Jovanovic     size_type           capacity() const;
25511c03c6dSDamjan Jovanovic 
25611c03c6dSDamjan Jovanovic     position_type       tellp() const;
25711c03c6dSDamjan Jovanovic 
25811c03c6dSDamjan Jovanovic     const_iterator      begin() const;
25911c03c6dSDamjan Jovanovic     const_iterator      cur() const;
26011c03c6dSDamjan Jovanovic     const_iterator      end() const;
26111c03c6dSDamjan Jovanovic 
26211c03c6dSDamjan Jovanovic     size_type           token_count(
26311c03c6dSDamjan Jovanovic                             char                i_cSplit ) const;
26411c03c6dSDamjan Jovanovic     String              token(
26511c03c6dSDamjan Jovanovic                             position_type       i_nNr,      /// Starting with 0.
26611c03c6dSDamjan Jovanovic                             char                i_cSpli ) const;
26711c03c6dSDamjan Jovanovic 
26811c03c6dSDamjan Jovanovic     // ACCESS
26911c03c6dSDamjan Jovanovic     iterator            begin();
27011c03c6dSDamjan Jovanovic     iterator            cur();
27111c03c6dSDamjan Jovanovic     iterator            end();
27211c03c6dSDamjan Jovanovic 
27311c03c6dSDamjan Jovanovic    private:
27411c03c6dSDamjan Jovanovic     // Interface bostream
27511c03c6dSDamjan Jovanovic     virtual UINT32      do_write(
27611c03c6dSDamjan Jovanovic                             const void *    i_pSrc,
27711c03c6dSDamjan Jovanovic                             UINT32          i_nNrofBytes);
27811c03c6dSDamjan Jovanovic     // Locals
27911c03c6dSDamjan Jovanovic     void                ProvideAddingSize(
28011c03c6dSDamjan Jovanovic                             size_type           i_nSize2Add );
28111c03c6dSDamjan Jovanovic     /// Resizes with the factor 2.0 (under 128), 1.5 or until i_nMinimumCapacity, whatever is bigger.
28211c03c6dSDamjan Jovanovic     void                Resize(
28311c03c6dSDamjan Jovanovic                             size_type           i_nMinimumCapacity = 0 );
28411c03c6dSDamjan Jovanovic     void                Advance(
28511c03c6dSDamjan Jovanovic                             size_type           i_nAddedSize );
28611c03c6dSDamjan Jovanovic     void                MoveData(
28711c03c6dSDamjan Jovanovic                             char *              i_pStart,
28811c03c6dSDamjan Jovanovic                             char *              i_pEnd,
28911c03c6dSDamjan Jovanovic                             seek_type           i_nDiff );
29011c03c6dSDamjan Jovanovic     // DATA
29111c03c6dSDamjan Jovanovic     size_type           nCapacity1;     /// Capacity of characters to contain + 1 for terminating 0.
29211c03c6dSDamjan Jovanovic     DYN char *          dpData;
29311c03c6dSDamjan Jovanovic     char *              pEnd;
29411c03c6dSDamjan Jovanovic     char *              pCur;
29511c03c6dSDamjan Jovanovic     insert_mode         eMode;
29611c03c6dSDamjan Jovanovic };
29711c03c6dSDamjan Jovanovic 
29811c03c6dSDamjan Jovanovic 
29911c03c6dSDamjan Jovanovic 
30011c03c6dSDamjan Jovanovic class StreamStrLock
30111c03c6dSDamjan Jovanovic {
30211c03c6dSDamjan Jovanovic   public:
30311c03c6dSDamjan Jovanovic                         StreamStrLock(
30411c03c6dSDamjan Jovanovic                             uintt               i_nMinimalSize );
30511c03c6dSDamjan Jovanovic                         ~StreamStrLock();
30611c03c6dSDamjan Jovanovic 
operator ()()30711c03c6dSDamjan Jovanovic     StreamStr &         operator()()            { return *pStr; }
30811c03c6dSDamjan Jovanovic 
30911c03c6dSDamjan Jovanovic   private:
31011c03c6dSDamjan Jovanovic     StreamStr *         pStr;
31111c03c6dSDamjan Jovanovic };
31211c03c6dSDamjan Jovanovic 
31311c03c6dSDamjan Jovanovic /** Splits a string into tokens by whitespace.
31411c03c6dSDamjan Jovanovic 
31511c03c6dSDamjan Jovanovic     The tokens are added to the end of o_list.
31611c03c6dSDamjan Jovanovic */
31711c03c6dSDamjan Jovanovic void                Split(
31811c03c6dSDamjan Jovanovic                         std::vector<String> &
31911c03c6dSDamjan Jovanovic                                             o_list,
32011c03c6dSDamjan Jovanovic                         const char *        i_text );
32111c03c6dSDamjan Jovanovic inline void         Join(
32211c03c6dSDamjan Jovanovic                         StreamStr &         o_text,
32311c03c6dSDamjan Jovanovic                         std::vector<String> &
32411c03c6dSDamjan Jovanovic                                             i_list,
32511c03c6dSDamjan Jovanovic                         const char *        i_sLink = " ");
32611c03c6dSDamjan Jovanovic 
32711c03c6dSDamjan Jovanovic // IMPLEMENTATION
32811c03c6dSDamjan Jovanovic 
32911c03c6dSDamjan Jovanovic inline const char *
operator <<(F_CSTR)33011c03c6dSDamjan Jovanovic StreamStr::operator<<( F_CSTR )
33111c03c6dSDamjan Jovanovic     { return dpData; }
33211c03c6dSDamjan Jovanovic inline void
clear()33311c03c6dSDamjan Jovanovic StreamStr::clear()
33411c03c6dSDamjan Jovanovic     { pEnd = pCur = dpData; *pEnd = '\0'; }
33511c03c6dSDamjan Jovanovic inline const char *
c_str() const33611c03c6dSDamjan Jovanovic StreamStr::c_str() const
33711c03c6dSDamjan Jovanovic     { return dpData; }
33811c03c6dSDamjan Jovanovic inline const char *
data() const33911c03c6dSDamjan Jovanovic StreamStr::data() const
34011c03c6dSDamjan Jovanovic     { return dpData; }
34111c03c6dSDamjan Jovanovic inline bool
empty() const34211c03c6dSDamjan Jovanovic StreamStr::empty() const
34311c03c6dSDamjan Jovanovic     { return dpData == pEnd; }
34411c03c6dSDamjan Jovanovic inline StreamStr::size_type
size() const34511c03c6dSDamjan Jovanovic StreamStr::size() const
34611c03c6dSDamjan Jovanovic     { return pEnd - dpData; }
34711c03c6dSDamjan Jovanovic inline StreamStr::size_type
length() const34811c03c6dSDamjan Jovanovic StreamStr::length() const
34911c03c6dSDamjan Jovanovic     { return size(); }
35011c03c6dSDamjan Jovanovic inline StreamStr::size_type
capacity() const35111c03c6dSDamjan Jovanovic StreamStr::capacity() const
35211c03c6dSDamjan Jovanovic     { return nCapacity1-1; }
35311c03c6dSDamjan Jovanovic inline StreamStr::position_type
tellp() const35411c03c6dSDamjan Jovanovic StreamStr::tellp() const
35511c03c6dSDamjan Jovanovic     { return size_type(pCur-dpData); }
35611c03c6dSDamjan Jovanovic inline StreamStr::const_iterator
begin() const35711c03c6dSDamjan Jovanovic StreamStr::begin() const
35811c03c6dSDamjan Jovanovic     { return dpData; }
35911c03c6dSDamjan Jovanovic inline StreamStr::const_iterator
cur() const36011c03c6dSDamjan Jovanovic StreamStr::cur() const
36111c03c6dSDamjan Jovanovic     { return pCur; }
36211c03c6dSDamjan Jovanovic inline StreamStr::const_iterator
end() const36311c03c6dSDamjan Jovanovic StreamStr::end() const
36411c03c6dSDamjan Jovanovic     { return pEnd; }
36511c03c6dSDamjan Jovanovic inline StreamStr::iterator
begin()36611c03c6dSDamjan Jovanovic StreamStr::begin()
36711c03c6dSDamjan Jovanovic     { return dpData; }
36811c03c6dSDamjan Jovanovic inline StreamStr::iterator
cur()36911c03c6dSDamjan Jovanovic StreamStr::cur()
37011c03c6dSDamjan Jovanovic     { return pCur; }
37111c03c6dSDamjan Jovanovic inline StreamStr::iterator
end()37211c03c6dSDamjan Jovanovic StreamStr::end()
37311c03c6dSDamjan Jovanovic     { return pEnd; }
37411c03c6dSDamjan Jovanovic 
37511c03c6dSDamjan Jovanovic inline void
Join(StreamStr & o_text,std::vector<String> & i_list,const char * i_sLink)37611c03c6dSDamjan Jovanovic Join( StreamStr &           o_text,
37711c03c6dSDamjan Jovanovic       std::vector<String> & i_list,
37811c03c6dSDamjan Jovanovic       const char *          i_sLink )
37911c03c6dSDamjan Jovanovic {
38011c03c6dSDamjan Jovanovic     o_text.operator_join(i_list.begin(),i_list.end(),i_sLink);
38111c03c6dSDamjan Jovanovic }
38211c03c6dSDamjan Jovanovic 
38311c03c6dSDamjan Jovanovic 
38411c03c6dSDamjan Jovanovic 
38511c03c6dSDamjan Jovanovic 
38611c03c6dSDamjan Jovanovic }   // namespace csv
38711c03c6dSDamjan Jovanovic #endif
388