1
/* Copyright (C) 2008 PrimeBase Technologies GmbH, Germany
3
* PrimeBase Media Stream for MySQL
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
* Original author: Paul McCullagh (H&G2JCtL)
20
* Continued development: Barry Leslie
25
* This class encapsulates a basic string.
29
#ifndef __CSSTRING_H__
30
#define __CSSTRING_H__
37
#include <CoreFoundation/CFString.h>
44
* A unsigned 16-bit unicode character:
46
#define unichar uint16_t
48
/* CSStringBufferImpl is the string buffer implementation.
49
* Of this implementation we have various types.
51
class CSStringBufferImpl {
54
CSStringBufferImpl(uint32_t grow);
55
~CSStringBufferImpl();
61
void append(const char *str, size_t len);
63
void append(const char *str) {append(str, strlen(str));}
65
void append(int value);
67
void append(uint32_t value);
69
void append(uint64_t value);
73
char *getBuffer(uint32_t pos) { return iBuffer ? iBuffer + pos : NULL; }
77
void setLength(uint32_t len);
79
void setGrowSize(uint32_t size) { iGrow = size; }
81
uint32_t length() { return myStrLen; }
83
uint32_t ignore(uint32_t pos, char ch);
85
uint32_t find(uint32_t pos, char ch);
87
uint32_t trim(uint32_t pos, char ch);
89
CSString *substr(uint32_t pos, uint32_t len);
91
void take(CSStringBufferImpl *buf) {
95
myStrLen = buf->myStrLen;
96
iBuffer = buf->take();
106
class CSStringBuffer : public CSStringBufferImpl, public CSObject {
108
CSStringBuffer(): CSStringBufferImpl(), CSObject() { }
109
CSStringBuffer(uint32_t grow): CSStringBufferImpl(grow), CSObject() { }
112
class CSStaticStringBuffer : public CSStringBufferImpl, public CSStaticObject {
113
virtual void finalize() { clear(); }
116
CSStaticStringBuffer(): CSStringBufferImpl(), CSStaticObject() { }
117
CSStaticStringBuffer(uint32_t grow): CSStringBufferImpl(grow), CSStaticObject() { }
120
class CSRefStringBuffer : public CSStringBufferImpl, public CSRefObject {
122
CSRefStringBuffer(): CSStringBufferImpl(), CSRefObject() { }
123
CSRefStringBuffer(uint32_t grow): CSStringBufferImpl(grow), CSRefObject() { }
126
class CSSyncStringBuffer : public CSStringBuffer, public CSSync {
128
CSSyncStringBuffer(uint32_t growSize): CSStringBuffer(growSize), CSSync() { }
129
CSSyncStringBuffer(): CSStringBuffer(), CSSync() { }
134
class CSString : public CSRefObject {
137
CSString(const char *cstr);
141
* Construct a string from a C-style UTF-8
144
static CSString *newString(const char *cstr);
146
/* Construct a string from a UTF-8 byte array: */
147
static CSString *newString(const char *bytes, uint32_t len);
149
/* Construct a string from string buffer: */
150
static CSString *newString(CSStringBuffer *sb);
153
* Returns a pointer to a UTF-8 string.
154
* The returned string must be
155
* not be freed by the caller.
157
virtual const char *getCString();
160
* Return the character at a certain point:
162
virtual CS_CHAR charAt(uint32_t pos);
163
virtual CS_CHAR upperCharAt(uint32_t pos);
164
virtual void setCharAt(uint32_t pos, CS_CHAR ch);
167
* Returns < 0 if this string is
168
* sorted before val, 0 if equal,
169
* > 0 if sortede after.
170
* The comparison is case-insensitive.
172
virtual int compare(CSString *val);
173
virtual int compare(const char *val, uint32_t len = ((uint32_t) 0xFFFFFFFF));
176
* Case sensitive match.
178
virtual bool startsWith(uint32_t index, const char *);
180
/* Returns the string length in characters. */
181
virtual uint32_t length() { return myStrLen; }
182
virtual void setLength(uint32_t len);
184
virtual bool equals(const char *str);
187
* Return a copy of this string.
189
virtual CSString *clone(uint32_t pos, uint32_t len);
192
* Concatinate 2 strings.
194
virtual CSString *concat(CSString *str);
195
virtual CSString *concat(const char *str);
197
/* Return an upper case version of the string: */
198
virtual CSString *toUpper();
201
* Returns a case-insensitive has
204
virtual uint32_t hashKey();
207
* Locate the count'th occurance of the given
208
* string, moving from left to right or right to
209
* left if count is negative.
211
* The index of the first character is zero.
212
* If not found, then index returned depends
213
* on the search direction.
215
* Search from left to right will return
216
* the length of the string, and search
217
* from right to left will return 0.
219
virtual uint32_t locate(const char *, int32_t count);
220
virtual uint32_t locate(uint32_t pos, const char *);
221
virtual uint32_t locate(uint32_t pos, CS_CHAR ch);
223
virtual uint32_t skip(uint32_t pos, CS_CHAR ch);
225
virtual CSString *substr(uint32_t index, uint32_t size);
226
virtual CSString *substr(uint32_t index);
228
virtual CSString *left(const char *, int32_t count);
229
virtual CSString *left(const char *);
231
virtual CSString *right(const char *, int32_t count);
232
virtual CSString *right(const char *);
234
virtual bool startsWith(const char *);
235
virtual bool endsWith(const char *);
237
/* Return the next position in the string, but do
238
* not go past the length of the string.
240
virtual uint32_t nextPos(uint32_t pos);
242
virtual CSString *clone(uint32_t len);
243
virtual CSString *clone();
245
virtual CSObject *getKey();
247
virtual int compareKey(CSObject *);