10 #ifndef SkString_DEFINED
11 #define SkString_DEFINED
13 #include "../private/SkTArray.h"
21 static bool SkStrStartsWith(
const char string[],
const char prefixStr[]) {
24 return !strncmp(
string, prefixStr, strlen(prefixStr));
26 static bool SkStrStartsWith(
const char string[],
const char prefixChar) {
28 return (prefixChar == *
string);
31 bool SkStrEndsWith(
const char string[],
const char suffixStr[]);
32 bool SkStrEndsWith(
const char string[],
const char suffixChar);
34 int SkStrStartsWithOneOf(
const char string[],
const char prefixes[]);
36 static int SkStrFind(
const char string[],
const char substring[]) {
37 const char *first = strstr(
string, substring);
38 if (NULL == first)
return -1;
39 return SkToInt(first - &
string[0]);
42 static int SkStrFindLastOf(
const char string[],
const char subchar) {
43 const char* last = strrchr(
string, subchar);
44 if (NULL == last)
return -1;
45 return SkToInt(last - &
string[0]);
48 static bool SkStrContains(
const char string[],
const char substring[]) {
51 return (-1 != SkStrFind(
string, substring));
53 static bool SkStrContains(
const char string[],
const char subchar) {
58 return (-1 != SkStrFind(
string, tmp));
61 static inline char *SkStrDup(
const char string[]) {
62 char *ret = (
char *) sk_malloc_throw(strlen(
string)+1);
63 memcpy(ret,
string,strlen(
string)+1);
85 #define SkStrAppendU32_MaxSize 10
86 char* SkStrAppendU32(
char buffer[], uint32_t);
87 #define SkStrAppendU64_MaxSize 20
88 char* SkStrAppendU64(
char buffer[], uint64_t,
int minDigits);
90 #define SkStrAppendS32_MaxSize (SkStrAppendU32_MaxSize + 1)
91 char* SkStrAppendS32(
char buffer[], int32_t);
92 #define SkStrAppendS64_MaxSize (SkStrAppendU64_MaxSize + 1)
93 char* SkStrAppendS64(
char buffer[], int64_t,
int minDigits);
102 #define SkStrAppendScalar_MaxSize 15
111 #define SkStrAppendScalar SkStrAppendFloat
113 char* SkStrAppendFloat(
char buffer[],
float);
125 explicit SkString(
const char text[]);
126 SkString(
const char text[],
size_t len);
131 bool isEmpty()
const {
return 0 == fRec->fLength; }
132 size_t size()
const {
return (
size_t) fRec->fLength; }
133 const char* c_str()
const {
return fRec->data(); }
134 char operator[](
size_t n)
const {
return this->c_str()[n]; }
137 bool equals(
const char text[])
const;
138 bool equals(
const char text[],
size_t len)
const;
140 bool startsWith(
const char prefixStr[])
const {
141 return SkStrStartsWith(fRec->data(), prefixStr);
143 bool startsWith(
const char prefixChar)
const {
144 return SkStrStartsWith(fRec->data(), prefixChar);
146 bool endsWith(
const char suffixStr[])
const {
147 return SkStrEndsWith(fRec->data(), suffixStr);
149 bool endsWith(
const char suffixChar)
const {
150 return SkStrEndsWith(fRec->data(), suffixChar);
152 bool contains(
const char substring[])
const {
153 return SkStrContains(fRec->data(), substring);
155 bool contains(
const char subchar)
const {
156 return SkStrContains(fRec->data(), subchar);
158 int find(
const char substring[])
const {
159 return SkStrFind(fRec->data(), substring);
161 int findLastOf(
const char subchar)
const {
162 return SkStrFindLastOf(fRec->data(), subchar);
176 SkString& operator=(
const char text[]);
178 char* writable_str();
179 char& operator[](
size_t n) {
return this->writable_str()[n]; }
183 void resize(
size_t len) { this->set(NULL, len); }
184 void set(
const SkString& src) { *
this = src; }
185 void set(
const char text[]);
186 void set(
const char text[],
size_t len);
187 void setUTF16(
const uint16_t[]);
188 void setUTF16(
const uint16_t[],
size_t len);
190 void insert(
size_t offset,
const SkString& src) { this->insert(offset, src.c_str(), src.size()); }
191 void insert(
size_t offset,
const char text[]);
192 void insert(
size_t offset,
const char text[],
size_t len);
193 void insertUnichar(
size_t offset,
SkUnichar);
194 void insertS32(
size_t offset, int32_t value);
195 void insertS64(
size_t offset, int64_t value,
int minDigits = 0);
196 void insertU32(
size_t offset, uint32_t value);
197 void insertU64(
size_t offset, uint64_t value,
int minDigits = 0);
198 void insertHex(
size_t offset, uint32_t value,
int minDigits = 0);
199 void insertScalar(
size_t offset, SkScalar);
201 void append(
const SkString& str) { this->insert((
size_t)-1, str); }
202 void append(
const char text[]) { this->insert((
size_t)-1, text); }
203 void append(
const char text[],
size_t len) { this->insert((
size_t)-1, text, len); }
204 void appendUnichar(
SkUnichar uni) { this->insertUnichar((
size_t)-1, uni); }
205 void appendS32(int32_t value) { this->insertS32((
size_t)-1, value); }
206 void appendS64(int64_t value,
int minDigits = 0) { this->insertS64((
size_t)-1, value, minDigits); }
207 void appendU32(uint32_t value) { this->insertU32((
size_t)-1, value); }
208 void appendU64(uint64_t value,
int minDigits = 0) { this->insertU64((
size_t)-1, value, minDigits); }
209 void appendHex(uint32_t value,
int minDigits = 0) { this->insertHex((
size_t)-1, value, minDigits); }
210 void appendScalar(SkScalar value) { this->insertScalar((
size_t)-1, value); }
212 void prepend(
const SkString& str) { this->insert(0, str); }
213 void prepend(
const char text[]) { this->insert(0, text); }
214 void prepend(
const char text[],
size_t len) { this->insert(0, text, len); }
215 void prependUnichar(
SkUnichar uni) { this->insertUnichar(0, uni); }
216 void prependS32(int32_t value) { this->insertS32(0, value); }
217 void prependS64(int32_t value,
int minDigits = 0) { this->insertS64(0, value, minDigits); }
218 void prependHex(uint32_t value,
int minDigits = 0) { this->insertHex(0, value, minDigits); }
219 void prependScalar(SkScalar value) { this->insertScalar((
size_t)-1, value); }
221 void printf(
const char format[], ...) SK_PRINTF_LIKE(2, 3);
222 void appendf(const
char format[], ...) SK_PRINTF_LIKE(2, 3);
223 void appendVAList(const
char format[], va_list);
224 void prependf(const
char format[], ...) SK_PRINTF_LIKE(2, 3);
225 void prependVAList(const
char format[], va_list);
227 void remove(
size_t offset,
size_t length);
230 SkString& operator+=(
const char text[]) { this->append(text);
return *
this; }
231 SkString& operator+=(
const char c) { this->append(&c, 1);
return *
this; }
244 char fBeginningOfData;
246 char* data() {
return &fBeginningOfData; }
247 const char* data()
const {
return &fBeginningOfData; }
252 void validate()
const;
254 void validate()
const {}
257 static const Rec gEmptyRec;
258 static Rec* AllocRec(
const char text[],
size_t len);
259 static Rec* RefRec(Rec*);
263 SkString SkStringPrintf(
const char* format, ...);
271 enum SkStrSplitMode {
274 kStrict_SkStrSplitMode,
279 kCoalesce_SkStrSplitMode
283 void SkStrSplit(
const char* str,
const char* delimiters, SkStrSplitMode splitMode,
284 SkTArray<SkString>* out);
285 inline void SkStrSplit(
const char* str,
const char* delimiters, SkTArray<SkString>* out) {
286 SkStrSplit(str, delimiters, kCoalesce_SkStrSplitMode, out);
Definition: SkString.h:240
void swap(SkString &other)
Swap contents between this and other.
int32_t SkUnichar
32 bit integer to hold a unicode value
Definition: SkTypes.h:295
void resize(size_t len)
Destructive resize, does not preserve contents.
Definition: SkString.h:183
Light weight class for managing strings.
Definition: SkString.h:121