25 #include <l4/cxx/minmax> 49 String(
char const *s)
throw() : _start(s), _len(__builtin_strlen(s)) {}
51 String(
char const *s,
unsigned long len)
throw() : _start(s), _len(
len) {}
59 String(
char const *s,
char const *e)
throw() : _start(s), _len(e - s) {}
65 Index
start()
const {
return _start; }
67 Index
end()
const {
return _start + _len; }
69 int len()
const {
return _len; }
72 void start(
char const *s) { _start = s; }
76 bool empty()
const {
return !_len; }
87 return String(_start, end - _start);
106 if (start >= _start && !
eof(start))
108 unsigned long nlen = _start + _len -
start;
111 return String(start, nlen);
118 template<
typename F >
135 char const *
find(
char const *c)
const 143 char const *
rfind(
char const *c)
const 148 char const *p =
end();
169 for (i = 0; i < c._len && i < _len; ++i)
170 if (_start[i] != c[i])
172 return i == c._len ?
start() + i : 0;
176 char const *
find(
int c,
char const *s)
const 202 char const *
find(
char const *c,
char const *s)
const 212 for (
char const *x = c; *x; ++x)
221 char const &
operator [] (
unsigned long idx)
const {
return _start[idx]; }
228 bool eof(
char const *s)
const {
return s >= _start + _len || !*s; }
238 template<
typename INT>
246 if (*c >=
'0' && *c <=
'9')
267 template<
typename INT>
276 if (shift >
sizeof(INT) * 8)
279 if (*c >=
'0' && *c <=
'9')
281 else if (*c >=
'A' && *c <=
'F')
283 else if (*c >=
'a' && *c <=
'f')
300 for (
unsigned long i = 0; i < _len; ++i)
301 if (_start[i] != o._start[i])
320 L4::BasicOStream &operator << (L4::BasicOStream &s,
cxx::String const &str)
String substr(char const *start, unsigned long len=0) const
Substring of length len starting at start.
void len(unsigned long len)
Set length.
String(char const *s)
Initialize from a zero-terminated string.
int from_dec(INT *v) const
Convert decimal string to integer.
bool eof(char const *s) const
Check if pointer s points behind string.
Index starts_with(cxx::String const &c) const
Check if c is a prefix of string.
char const * Index
Character index type.
char const * find_match(F &&match) const
Find matching character. match should be a function such as isspace.
char const * find(char const *c) const
Find character. Return end() if not found.
char const * find(int c) const
Find character. Return end() if not found.
bool operator!=(String const &o) const
Inequality.
char const * find(int c, char const *s) const
Find character c starting at position s. Return end() if not found.
char const * rfind(char const *c) const
Find right-most character. Return end() if not found.
char const & operator[](unsigned long idx) const
Get character at idx.
bool operator==(String const &o) const
Equality.
void start(char const *s)
Set start.
Allocation free string class with explicit length field.
char const * find(char const *c, char const *s) const
Find character set at position.
Index start() const
Pointer to first character.
Index end() const
Pointer to first byte behind the string.
int from_hex(INT *v) const
Convert hex string to integer.
String head(unsigned long end) const
Prefix of length end.
String head(Index end) const
Return prefix up to index.
String()
Zero-initialize. Create an invalid string.
String(char const *s, unsigned long len)
Initialize from a pointer to first character and a length.
String(char const *s, char const *e)
Initialize with start and end pointer.
String substr(unsigned long idx, unsigned long len=~0UL) const
Substring of length len starting at idx.
T1 min(T1 a, T1 b)
Get the minimum of a and b.
bool empty() const
Check if the string has length zero.