22 #ifndef ELM_STRING_STRING_H
23 #define ELM_STRING_STRING_H
26 #include <elm/string/CString.h>
36 typedef struct buffer_t {
40 static buffer_t empty_buf;
41 static const int zero_off =
sizeof(
unsigned short);
42 mutable const char *buf;
43 mutable unsigned short off, len;
46 void copy(
const char *str,
int _len);
47 void lock(
void)
const { ((buffer_t *)buf)->use++; }
49 void unlock(
void)
const {
50 ((buffer_t *)buf)->use--;
51 if(!((buffer_t *)buf)->use && buf != (
char *)&empty_buf)
54 inline String(
const char *_buf,
int _off,
int _len): buf(_buf), off(_off), len(_len) { lock(); };
55 static String concat(
const char *s1,
int l1,
const char *s2,
int l2);
57 : buf((char *)buffer), off(offset), len(length) { lock(); };
60 inline String(
void): buf((char *)&empty_buf), off(zero_off), len(0) { lock(); };
61 inline String(
const char *str,
int _len) { copy(str, _len); };
62 inline String(
const char *str) {
if(!str) str =
""; copy(str, strlen(str)); };
64 inline String(
const String& str): buf(str.buf), off(str.off), len(str.len) { lock(); };
67 { str.lock(); unlock(); buf = str.buf; off = str.off; len = str.len;
return *
this; };
69 { unlock(); copy(str.
chars(), str.
length());
return *
this; };
71 {
if(!str) str =
""; unlock(); copy(str, strlen(str));
return *
this; };
73 inline int length(
void)
const {
return len; };
74 inline const char *
chars(
void)
const {
return buf + off; };
76 int res = memcmp(
chars(), str.
chars(), len > str.len ? str.len : len);
77 return res ? res : len - str.len;
81 int res = memcmp(
chars(), str.
chars(), len > slen ? slen : len);
82 return res ? res : len - slen;
85 inline bool isEmpty(
void)
const {
return !len; };
86 inline operator bool(
void)
const {
return !
isEmpty(); };
91 inline char charAt(
int index)
const {
return buf[index + off]; };
101 {
for(
const char *p =
chars() + pos; p <
chars() + len; p++)
if(*p == chr)
return p -
chars();
return -1; };
105 {
for(
const char *p =
chars() + pos - 1; p >=
chars(); p--)
if(*p == chr)
return p -
chars();
return -1; };
109 inline bool startsWith(
const char *str)
const;
112 inline bool endsWith(
const char *str)
const;
122 #ifndef ELM_NO_STRING_SHORTCUT
132 return len >= l && !memcmp(
chars(), str.
chars(), l);
142 return len >= l && !memcmp(
chars() + len - l, str.
chars(), l);
146 && !memcmp(
chars() + len - str.len, str.
chars(), str.len);
151 #endif // ELM_STRING_STRING_H
String ltrim(void) const
Definition: string_String.cpp:509
String substring(int _off) const
Definition: String.h:93
String & operator=(const char *str)
Definition: String.h:70
String(const char *str, int _len)
Definition: String.h:61
String concat(const String &str) const
Definition: String.h:97
String & operator=(const String &str)
Definition: String.h:66
int compare(const String &str) const
Definition: String.h:75
String(const String &str)
Definition: String.h:64
String & operator=(const CString str)
Definition: String.h:68
String trim(void) const
Definition: string_String.cpp:500
String(cstring str)
Definition: String.h:63
int lastIndexOf(char chr, int pos) const
Definition: String.h:104
~String(void)
Definition: String.h:65
String(void)
Definition: String.h:60
String concat(const CString str) const
Definition: String.h:96
String string
Definition: String.h:123
uint32 offset
Definition: int.h:42
String(const char *str)
Definition: String.h:62
const char * chars(void) const
Definition: String.h:74
int compare(const CString str) const
Definition: String.h:79
bool startsWith(const char *str) const
Definition: String.h:127
int indexOf(char chr, int pos) const
Definition: String.h:100
const char * operator&(void) const
Definition: String.h:89
bool endsWith(const char *str) const
Definition: String.h:137
bool isEmpty(void) const
Definition: String.h:85
char charAt(int index) const
Definition: String.h:91
int indexOf(char chr) const
Definition: String.h:99
Definition: StringBuffer.h:18
int lastIndexOf(const String &str)
Definition: String.h:106
int length(void) const
Definition: String.h:73
char operator[](int index) const
Definition: String.h:92
String rtrim(void) const
Definition: string_String.cpp:521
friend class CString
Definition: String.h:32
String substring(int _off, int _len) const
Definition: String.h:94
CString toCString(void) const
Definition: String.h:88
int length(void) const
Definition: CString.h:26
const char * chars(void) const
Definition: CString.h:27
int lastIndexOf(char chr) const
Definition: String.h:103