35 #ifndef _UCOMMON_STRING_H_
36 #define _UCOMMON_STRING_H_
38 #ifndef _UCOMMON_CPR_H_
42 #ifndef _UCOMMON_GENERICS_H_
46 #ifndef _UCOMMON_PROTOCOLS_H_
50 #ifndef _UCOMMON_OBJECT_H_
62 #define PGP_B64_WIDTH 64
63 #define MIME_B64_WIDTH 76
144 void set(
const char *text);
150 void add(
const char *text);
156 void add(
char character);
202 virtual int compare(
const char *
string)
const;
204 inline int collate(
const char *
string)
const
205 {
return compare(
string);};
212 bool equal(
const char *
string)
const;
218 virtual void retain(
void);
230 virtual cstring *c_copy(
void)
const;
246 #if _MSC_VER > 1400 // windows broken dll linkage issue...
297 string(const
char *text);
305 string(const
char *text,
strsize_t size);
313 string(const
char *text, const
char *end);
320 string(const
string& existing);
341 int scanf(const
char *format, ...) __SCANF(2, 3);
349 int vscanf(const
char *format, va_list args) __SCANF(2, 0);
356 strsize_t printf(const
char *format, ...) __PRINTF(2, 3);
364 strsize_t vprintf(const
char *format, va_list args) __PRINTF(2, 0);
370 char *c_mem(
void) const;
376 const
char *c_str(
void) const;
389 void set(const
char *text);
422 void add(const
char *text);
428 void add(
char character);
434 void trim(const
char *list);
440 void chop(const
char *list);
446 void strip(const
char *list);
453 bool unquote(const
char *quote);
489 strsize_t ccount(const
char *list) const;
519 char at(
int position) const;
526 const
char *last(const
char *list) const;
533 const
char *first(const
char *list) const;
539 const
char *begin(
void) const;
545 const
char *end(
void) const;
553 const
char *skip(const
char *list,
strsize_t offset = 0) const;
562 const
char *rskip(const
char *list,
strsize_t offset = npos) const;
570 const
char *find(const
char *list,
strsize_t offset = 0) const;
578 const
char *rfind(const
char *list,
strsize_t offset = npos) const;
585 void split(const
char *
pointer);
599 void rsplit(const
char *pointer);
613 const
char *chr(
char character) const;
621 const
char *rchr(
char character) const;
639 inline operator const
char *()
const
646 inline const char *operator*()
const
653 bool full(
void)
const;
661 string operator()(
int offset,
strsize_t size)
const;
670 const char *operator()(
int offset)
const;
677 const char operator[](
int offset)
const;
683 bool operator!()
const;
689 operator bool()
const;
696 string& operator^=(
const string&
object);
703 string& operator+=(
const char *text);
710 string& operator^=(
const char *text);
717 string& operator+(
const char *text);
725 string& operator&(
const char *text);
733 string& operator=(
const string&
object);
739 string& operator=(
const char *text);
768 bool operator==(
const char *text)
const;
775 bool operator!=(
const char *text)
const;
782 bool operator<(
const char *text)
const;
789 bool operator<=(
const char *text)
const;
796 bool operator>(
const char *text)
const;
803 bool operator>=(
const char *text)
const;
810 string &operator%(
short& value);
817 string &operator%(
unsigned short& value);
824 string &operator%(
long& value);
831 string &operator%(
unsigned long& value);
838 string &operator%(
double& value);
845 string &operator%(
const char *text);
853 static int scanf(
string&
object,
const char *format, ...) __SCANF(2, 3);
861 static
strsize_t printf(
string&
object, const
char *format, ...) __PRINTF(2, 3);
868 static
void swap(
string& object1,
string& object2);
874 static
void fix(
string&
object);
880 static
void lower(
char *text);
886 static
void upper(
char *text);
901 static
char *token(
char *text,
char **last, const
char *list, const
char *quote = NULL, const
char *end = NULL);
909 static
char *skip(
char *text, const
char *list);
917 static
char *rskip(
char *text, const
char *list);
926 static
char *unquote(
char *text, const
char *quote);
935 static
char *rset(
char *buffer,
size_t size, const
char *text);
945 static
char *set(
char *buffer,
size_t size, const
char *text);
956 static
char *set(
char *buffer,
size_t size, const
char *text,
size_t max);
967 static
char *
add(
char *buffer,
size_t size, const
char *text);
979 static
char *
add(
char *buffer,
size_t size, const
char *text,
size_t max);
988 static const
char *ifind(const
char *text, const
char *key, const
char *optional);
997 static const
char *find(const
char *text, const
char *key, const
char *optional);
1004 static
size_t count(const
char *text);
1012 static
int compare(const
char *text1, const
char *text2);
1014 static inline
int collate(const
char *text1, const
char *text2)
1015 {
return compare(text1, text2);};
1023 static bool equal(
const char *text1,
const char *text2);
1032 static int compare(
const char *text1,
const char *text2,
size_t size);
1041 static bool equal(
const char *text1,
const char *text2,
size_t size);
1049 static int case_compare(
const char *text1,
const char *text2);
1057 static bool case_equal(
const char *text1,
const char *text2);
1066 static int case_compare(
const char *text1,
const char *text2,
size_t size);
1075 static bool case_equal(
const char *text1,
const char *text2,
size_t size);
1084 static char *trim(
char *text,
const char *list);
1093 static char *chop(
char *text,
const char *list);
1102 static char *strip(
char *text,
const char *list);
1112 static char *fill(
char *text,
size_t size,
char character);
1120 static unsigned ccount(
const char *text,
const char *list);
1128 static char *find(
char *text,
const char *list);
1136 static char *rfind(
char *text,
const char *list);
1144 static char *first(
char *text,
const char *list);
1152 static char *last(
char *text,
const char *list);
1159 static char *
dup(
const char *text);
1174 inline static char *token(
string&
object,
char **last,
const char *list,
const char *quote = NULL,
const char *end = NULL)
1175 {
return token(
object.c_mem(), last, list, quote, end);};
1184 __SCANF(2,0) inline static
int vscanf(
string&
object, const
char *format, va_list args)
1185 {
return object.vscanf(format, args);}
1194 __PRINTF(2,0) inline static
strsize_t vprintf(
string&
object, const
char *format, va_list args)
1195 {
return object.vprintf(format, args);}
1203 {
return object.len();};
1210 inline static char *mem(
string&
object)
1211 {
return object.c_mem();};
1219 {
return object.size();};
1225 inline static void clear(
string&
object)
1234 inline static unsigned ccount(
string&
object,
const char *list)
1235 {
return object.ccount(list);};
1242 inline static size_t count(
string&
object)
1243 {
return object.count();};
1249 inline static void upper(
string&
object)
1256 inline static void lower(
string&
object)
1265 inline static bool unquote(
string&
object,
const char *quote)
1266 {
return object.unquote(quote);};
1273 inline static void trim(
string&
object,
const char *list)
1274 {
object.trim(list);};
1281 inline static void chop(
string&
object,
const char *list)
1282 {
object.trim(list);};
1289 inline static void strip(
string&
object,
const char *list)
1290 {
object.trim(list);};
1298 inline static const char *find(
string&
object,
const char *list)
1299 {
return object.find(list);};
1307 inline static const char *rfind(
string&
object,
const char *list)
1308 {
return object.rfind(list);};
1316 inline static const char *first(
string&
object,
const char *list)
1317 {
return object.first(list);};
1325 inline static const char *last(
string&
object,
const char *list)
1326 {
return object.last(list);};
1334 inline static double tod(
string&
object,
char **
pointer = NULL)
1335 {
return strtod(mem(
object),
pointer);};
1343 inline static long tol(
string&
object,
char **
pointer = NULL)
1344 {
return strtol(mem(
object),
pointer, 0);};
1352 inline static double tod(
const char *text,
char **
pointer = NULL)
1353 {
return strtod(text,
pointer);};
1361 inline static long tol(
const char *text,
char **
pointer = NULL)
1362 {
return strtol(text,
pointer, 0);};
1372 static size_t b64encode(
char *
string,
const uint8_t *binary,
size_t size,
size_t width = 0);
1381 static size_t b64decode(uint8_t *binary,
const char *
string,
size_t size);
1389 static uint32_t crc24(uint8_t *binary,
size_t size);
1397 static uint16_t crc16(uint8_t *binary,
size_t size);
1406 static unsigned hexdump(
const unsigned char *binary,
char *
string,
const char *format);
1415 static unsigned hexpack(
unsigned char *binary,
const char *
string,
const char *format);
1417 static unsigned hexsize(
const char *format);
1430 #if _MSC_VER > 1400 // windows broken dll linkage issue...
1433 static const size_t header;
1450 {
set(
object.c_str());};
1514 {string::set(buffer, S, text);};
1520 inline void operator=(
const char *text)
1521 {string::set(buffer, S, text);};
1528 inline void operator+=(
const char *text)
1535 inline operator bool()
const
1536 {
return buffer[0];};
1542 inline bool operator!()
const
1543 {
return buffer[0] == 0;};
1549 inline operator char *()
1556 inline char *operator*()
1564 inline char operator[](
size_t offset)
const
1565 {
return buffer[offset];};
1572 inline char *operator()(
size_t offset)
1573 {
return buffer + offset;};
1579 inline size_t size(
void)
const
1604 template<str
size_t S>
1608 char buffer[
sizeof(
cstring) + S];
1626 inline void operator=(
const char *text)
1633 inline void operator=(
string&
object)
1634 {
set(
object.c_str());};
1637 #if !defined(_MSWINDOWS_) && !defined(__QNX__)
1645 extern "C" inline int stricmp(
const char *string1,
const char *string2)
1646 {
return string::case_compare(string1, string2);}
1655 extern "C" inline int strnicmp(
const char *string1,
const char *string2,
size_t max)
1656 {
return string::case_compare(string1, string2, max);}
1666 inline bool eq(
char const *s1,
char const *s2)
1667 {
return String::equal(s1, s2);}
1676 inline bool eq(
char const *s1,
char const *s2,
size_t size)
1677 {
return String::equal(s1, s2, size);}
1686 {
return String::equal(s1.
c_str(), s2.
c_str());}
1695 inline bool case_eq(
char const *s1,
char const *s2)
1696 {
return String::case_equal(s1, s2);}
1699 inline bool ieq(
char const *s1,
char const *s2)
1700 {
return String::case_equal(s1, s2);}
1710 inline bool case_eq(
char const *s1,
char const *s2,
size_t size)
1711 {
return String::case_equal(s1, s2, size);}
1713 inline bool ieq(
char const *s1,
char const *s2,
size_t size)
1714 {
return String::case_equal(s1, s2, size);}
1724 {
return String::case_equal(s1.
c_str(), s2.
c_str());}
1726 inline String str(
const char *
string)
1732 inline String str(
short value)
1733 {
String temp(16,
"%hd", value);
return temp;}
1735 inline String str(
unsigned short value)
1736 {
String temp(16,
"%hu", value);
return temp;}
1738 inline String str(
long value)
1739 {
String temp(32,
"%ld", value);
return temp;}
1741 inline String str(
unsigned long value)
1742 {
String temp(32,
"%lu", value);
return temp;}
1744 inline String str(
double value)
1745 {
String temp(40,
"%f", value);
return temp;}