OpendTect  6.3
bufstring.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: A.H.Bril
8  Date: 12-4-2000
9  Contents: Variable buffer length strings with minimum size.
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "basicmod.h"
15 #include "fixedstring.h"
16 #include "string2.h"
17 class QString;
18 
38 mExpClass(Basic) BufferString : public OD::String
39 {
40 public:
41 
42  inline BufferString();
43  inline BufferString(const char*);
44  BufferString(const OD::String&);
45  BufferString(int minlen,bool setnull);
46  BufferString(const BufferString&);
47  template <class T>
48  inline BufferString(const char*,const T&,const char* s=0);
49  BufferString(const QString&);
50  virtual ~BufferString();
51  inline BufferString& operator=( const BufferString& b )
52  { return assignTo(b.buf_); }
53  inline BufferString& operator=( const char* s )
54  { return assignTo(s); }
55  inline BufferString& operator=( const FixedString& s )
56  { return assignTo(s.str()); }
57  inline BufferString& operator=( const OD::String& s )
58  { return assignTo(s.str()); }
59  template <class T>
60  inline BufferString& operator=(const T&);
61 
62  inline operator const char*() const { return buf(); }
63 
64  inline bool operator==(const BufferString&) const;
65  inline bool operator!=(const BufferString&) const;
66  inline bool operator==(const char*) const;
67  inline bool operator!=(const char*) const;
68  inline bool operator==(const OD::String&) const;
69  inline bool operator!=(const OD::String&) const;
70  inline bool operator==(const FixedString&) const;
71  inline bool operator!=(const FixedString&) const;
72 
73  inline char* getCStr()
74  { return const_cast<char*>(const_cast<BufferString*>(this)->gtBuf()); }
75  void fill(char*,int maxnrchar) const;
77 
78  inline char& operator []( int idx ) { return getCStr()[idx]; }
79  inline char& first() { return getCStr()[0]; }
80  inline char& last() { return getCStr()[size()-1]; }
81  char* find(char);
82  char* find(const char*);
83  inline const char* find(char) const;
84  inline const char* find(const char*) const;
85  char* findLast(char);
86  char* findLast(const char*);
87  inline const char* findLast(char) const;
88  inline const char* findLast(const char*) const;
89 
90  BufferString& setEmpty();
91  BufferString& set(const char*);
92  BufferString& set( const OD::String& s ) { return set(s.str()); }
93  template <class T>
94  BufferString& set(const T&);
95  BufferString& set(float,int nrdec);
96  BufferString& set(double,int nrdec);
97  BufferString& setLim(float,int maxnrchars);
98  BufferString& setLim(double,int maxnrchars);
99 
100  BufferString& add(char);
101  BufferString& add(const char*);
102  BufferString& add( const OD::String& s ) { return add(s.str()); }
103  BufferString& add(const QString&);
104  template <class T>
105  BufferString& add(const T&);
106  BufferString& add(float,int nrdec);
107  BufferString& add(double,int nrdec);
108  BufferString& addLim(float,int maxnrchars);
109  BufferString& addLim(double,int maxnrchars);
110 
111  BufferString& addSpace(int nrspaces=1);
112  BufferString& addTab(int nrtabs=1);
113  BufferString& addNewLine(int nrnewlines=1);
114 
115  inline unsigned int bufSize() const { return len_; }
116  bool setBufSize(unsigned int);
117  inline unsigned int minBufSize() const { return minlen_; }
118  void setMinBufSize(unsigned int);
119 
120  BufferString& replace(char from,char to);
121  BufferString& replace(const char* from,const char* to);
122  BufferString& remove(char);
123  inline BufferString& remove( const char* s ) { return replace(s,0); }
124  BufferString& trimBlanks();
125 
126  BufferString& insertAt(int idx, const char*);
127  //< If idx >= size(), pads spaces
128  BufferString& replaceAt(int idx, const char*,bool cutoff=true);
129  //< If idx >= size(), pads spaces
130  BufferString& toLower();
131  BufferString& toUpper();
132  BufferString& embed(char open,char close);
133  BufferString& unEmbed(char open,char close);
134  inline BufferString& quote( char q='\'' ) { return embed(q,q); }
135  inline BufferString& unQuote( char q='\'' ) { return unEmbed(q,q); }
136 
137  enum CleanType { OnlyAlphaNum, AllowDots,
138  NoSpaces, NoFileSeps, NoSpecialChars };
139  BufferString& clean(CleanType ct=OnlyAlphaNum);
140 
141  static const BufferString& empty();
142 
143 protected:
144 
145  char* buf_;
146  unsigned int len_;
147  const unsigned int minlen_;
148 
149  BufferString& assignTo(const char*);
150 
151  const char* gtBuf() const;
152  inline const char* gtStr() const;
153 
154 private:
155 
156  void init();
157  inline void destroy() { delete [] buf_; buf_ = 0; }
158  BufferString& addArr32Chars(const char*,int);
159 
160 public:
161 
162  // use add instead
163  inline BufferString& operator+=( const char* s ) { return add( s ); }
164  inline BufferString& operator+=( const OD::String& s )
165  { return add(s.str()); }
166  template <class T>
167  inline BufferString& operator+=( const T& t ) { return add( t ); }
168 
169 };
170 
171 
172 //Not implemented on purpose as it leads unwanted conversions to
173 //BufferStrings on the fly
174 inline bool operator==(const char*,const BufferString&) = delete;
175 inline bool operator!=(const char*,const BufferString&) = delete;
176 
177 #define mBufferStringSimpConstrInitList \
178  minlen_(mMaxFilePathLength+1), buf_(0), len_(0)
179 
182 inline BufferString::BufferString( const char* s )
186 
187 template <class T> inline
188 BufferString::BufferString( const char* s1, const T& t, const char* s2 )
190 { *this += s1; *this += t; *this += s2; }
191 
192 inline const char* BufferString::gtStr() const
193 { return buf_ && *buf_ ? const_cast<char*>( buf_ ) : 0; }
194 
195 inline bool BufferString::operator==( const BufferString& s ) const
196 { return isEqual( s.buf_ ); }
197 inline bool BufferString::operator!=( const BufferString& s ) const
198 { return !isEqual( s.buf_ ); }
199 inline bool BufferString::operator==( const char* s ) const
200 { return isEqual( s ); }
201 inline bool BufferString::operator!=( const char* s ) const
202 { return !isEqual( s ); }
203 inline bool BufferString::operator==( const FixedString& s ) const
204 { return isEqual( s.str() ); }
205 inline bool BufferString::operator!=( const FixedString& s ) const
206 { return !isEqual( s.str() ); }
207 inline bool BufferString::operator==( const OD::String& s ) const
208 { return isEqual( s.str() ); }
209 inline bool BufferString::operator!=( const OD::String& s ) const
210 { return !isEqual( s.str() ); }
211 
212 inline const char* BufferString::find( char c ) const
213 { return OD::String::find( c ); }
214 inline const char* BufferString::find( const char* s ) const
215 { return OD::String::find( s ); }
216 inline const char* BufferString::findLast( char c ) const
217 { return OD::String::findLast( c ); }
218 inline const char* BufferString::findLast( const char* s ) const
219 { return OD::String::findLast( s ); }
220 
221 template <class T> inline BufferString& BufferString::operator=( const T& t )
222 { return set( t ); }
223 
224 template <class T> inline BufferString& BufferString::add( const T& t )
225 { return add( toString(t) ); }
226 
227 inline BufferString& BufferString::set( const char* s )
228 { setEmpty(); return add( s ); }
229 
230 template <class T> inline BufferString& BufferString::set( const T& t )
231 { setEmpty(); return add( t ); }
232 
233 inline BufferString& BufferString::set( float f, int nrdec )
234 { setEmpty(); return add( f, nrdec ); }
235 
236 inline BufferString& BufferString::set( double d, int nrdec )
237 { setEmpty(); return add( d, nrdec ); }
238 
239 inline BufferString& BufferString::setLim( float f, int maxnrchars )
240 { setEmpty(); return addLim( f, maxnrchars ); }
241 
242 inline BufferString& BufferString::setLim( double d, int maxnrchars )
243 { setEmpty(); return addLim( d, maxnrchars ); }
244 
245 
251 {
252 public:
253 
254  StringPair(const char* str1, const char* str2)
255  : first_(str1), second_(str2) {}
256  StringPair(const char* compstr);
257 
258  static char separator() { return '|'; }
259 
260  const BufferString& first() const { return first_; }
261  BufferString& first() { return first_; }
262  const BufferString& second() const { return second_; }
263  BufferString& second() { return second_; }
264 
265  const OD::String& getCompString() const;
266 
267 protected:
268 
271 
272 };
const char * find(char) const
bool operator==(const BufferString &) const
Definition: bufstring.h:195
#define mExpClass(module)
Definition: commondefs.h:157
BufferString & quote(char q='\'')
Definition: bufstring.h:134
CleanType
Definition: bufstring.h:137
const char * str() const
Definition: odstring.h:46
BufferString & operator=(const FixedString &s)
Definition: bufstring.h:55
T to(const F &fr)
Definition: convert.h:31
BufferString & operator=(const BufferString &b)
Definition: bufstring.h:51
char * findLast(char)
OD::String that holds an existing text string.
Definition: fixedstring.h:27
BufferString & operator+=(const T &t)
Definition: bufstring.h:167
const char * gtStr() const
Definition: bufstring.h:192
char & last()
Definition: bufstring.h:80
bool init()
BufferString & setEmpty()
Definition: bufstring.h:137
BufferString & operator=(const OD::String &s)
Definition: bufstring.h:57
const BufferString & first() const
Definition: bufstring.h:260
BufferString & add(const OD::String &s)
Definition: bufstring.h:102
static char separator()
Definition: bufstring.h:258
BufferString & operator+=(const char *s)
Definition: bufstring.h:163
BufferString second_
Definition: bufstring.h:270
BufferString & addLim(float, int maxnrchars)
BufferString first_
Definition: bufstring.h:269
unsigned int len_
Definition: bufstring.h:146
char & first()
Definition: bufstring.h:79
bool isEqual(const char *, CaseSensitivity c=CaseSensitive) const
unsigned int bufSize() const
Definition: bufstring.h:115
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:29
BufferString & first()
Definition: bufstring.h:261
BufferString & assignTo(const char *)
unsigned int minBufSize() const
Definition: bufstring.h:117
bool operator!=(const BufferString &) const
Definition: bufstring.h:197
char * buf_
Definition: bufstring.h:145
BufferString & second()
Definition: bufstring.h:263
BufferString & set(const char *)
Definition: bufstring.h:227
BufferString & unQuote(char q='\'')
Definition: bufstring.h:135
A StringPair has two strings, first() and second(). The getCompString() function concatanates the two...
Definition: bufstring.h:250
BufferString toString(const DBKey &ky)
Definition: dbkey.h:115
const T * find(const ObjectSet< T > &os, const S &val)
Get const object in set.
Definition: objectset.h:187
bool operator!=(const char *, const BufferString &)=delete
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
const char * findLast(char) const
char * find(char)
BufferString & setLim(float, int maxnrchars)
Definition: bufstring.h:239
OpendTect.
Definition: commontypes.h:25
StringPair(const char *str1, const char *str2)
Definition: bufstring.h:254
BufferString & operator=(const char *s)
Definition: bufstring.h:53
BufferString & add(char)
bool operator==(const char *, const BufferString &)=delete
BufferString()
Definition: bufstring.h:180
BufferString & operator+=(const OD::String &s)
Definition: bufstring.h:164
#define mBufferStringSimpConstrInitList
Definition: bufstring.h:177
char * getCStr()
Definition: bufstring.h:73
const BufferString & second() const
Definition: bufstring.h:262
const unsigned int minlen_
Definition: bufstring.h:147
void destroy()
Definition: bufstring.h:157

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017