00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __PJ_STRING_H__
00021 #define __PJ_STRING_H__
00022
00028 #include <pj/types.h>
00029 #include <pj/compat/string.h>
00030
00031
00032 PJ_BEGIN_DECL
00033
00080 PJ_IDECL(pj_str_t) pj_str(char *str);
00081
00090 PJ_INLINE(const pj_str_t*) pj_cstr(pj_str_t *str, const char *s)
00091 {
00092 str->ptr = (char*)s;
00093 str->slen = s ? (pj_ssize_t)strlen(s) : 0;
00094 return str;
00095 }
00096
00106 PJ_INLINE(pj_str_t*) pj_strset( pj_str_t *str, char *ptr, pj_size_t length)
00107 {
00108 str->ptr = ptr;
00109 str->slen = (pj_ssize_t)length;
00110 return str;
00111 }
00112
00122 PJ_INLINE(pj_str_t*) pj_strset2( pj_str_t *str, char *src)
00123 {
00124 str->ptr = src;
00125 str->slen = src ? (pj_ssize_t)strlen(src) : 0;
00126 return str;
00127 }
00128
00138 PJ_INLINE(pj_str_t*) pj_strset3( pj_str_t *str, char *begin, char *end )
00139 {
00140 str->ptr = begin;
00141 str->slen = (pj_ssize_t)(end-begin);
00142 return str;
00143 }
00144
00153 PJ_IDECL(pj_str_t*) pj_strassign( pj_str_t *dst, pj_str_t *src );
00154
00163 PJ_IDECL(pj_str_t*) pj_strcpy(pj_str_t *dst, const pj_str_t *src);
00164
00173 PJ_IDECL(pj_str_t*) pj_strcpy2(pj_str_t *dst, const char *src);
00174
00184 PJ_IDECL(pj_str_t*) pj_strncpy(pj_str_t *dst, const pj_str_t *src,
00185 pj_ssize_t max);
00186
00198 PJ_IDECL(pj_str_t*) pj_strncpy_with_null(pj_str_t *dst, const pj_str_t *src,
00199 pj_ssize_t max);
00200
00210 PJ_IDECL(pj_str_t*) pj_strdup(pj_pool_t *pool,
00211 pj_str_t *dst,
00212 const pj_str_t *src);
00213
00223 PJ_IDECL(pj_str_t*) pj_strdup_with_null(pj_pool_t *pool,
00224 pj_str_t *dst,
00225 const pj_str_t *src);
00226
00236 PJ_IDECL(pj_str_t*) pj_strdup2(pj_pool_t *pool,
00237 pj_str_t *dst,
00238 const char *src);
00239
00249 PJ_IDECL(pj_str_t*) pj_strdup2_with_null(pj_pool_t *pool,
00250 pj_str_t *dst,
00251 const char *src);
00252
00253
00262 PJ_IDECL(pj_str_t) pj_strdup3(pj_pool_t *pool, const char *src);
00263
00271 PJ_INLINE(pj_size_t) pj_strlen( const pj_str_t *str )
00272 {
00273 return str->slen;
00274 }
00275
00283 PJ_INLINE(const char*) pj_strbuf( const pj_str_t *str )
00284 {
00285 return str->ptr;
00286 }
00287
00299 PJ_IDECL(int) pj_strcmp( const pj_str_t *str1, const pj_str_t *str2);
00300
00312 PJ_IDECL(int) pj_strcmp2( const pj_str_t *str1, const char *str2 );
00313
00326 PJ_IDECL(int) pj_strncmp( const pj_str_t *str1, const pj_str_t *str2,
00327 pj_size_t len);
00328
00341 PJ_IDECL(int) pj_strncmp2( const pj_str_t *str1, const char *str2,
00342 pj_size_t len);
00343
00355 PJ_IDECL(int) pj_stricmp(const pj_str_t *str1, const pj_str_t *str2);
00356
00373 #if defined(PJ_HAS_STRICMP_ALNUM) && PJ_HAS_STRICMP_ALNUM!=0
00374 PJ_IDECL(int) strnicmp_alnum(const char *str1, const char *str2,
00375 int len);
00376 #else
00377 #define strnicmp_alnum pj_ansi_strnicmp
00378 #endif
00379
00395 #if defined(PJ_HAS_STRICMP_ALNUM) && PJ_HAS_STRICMP_ALNUM!=0
00396 PJ_IDECL(int) pj_stricmp_alnum(const pj_str_t *str1, const pj_str_t *str2);
00397 #else
00398 #define pj_stricmp_alnum pj_stricmp
00399 #endif
00400
00412 PJ_IDECL(int) pj_stricmp2( const pj_str_t *str1, const char *str2);
00413
00426 PJ_IDECL(int) pj_strnicmp( const pj_str_t *str1, const pj_str_t *str2,
00427 pj_size_t len);
00428
00441 PJ_IDECL(int) pj_strnicmp2( const pj_str_t *str1, const char *str2,
00442 pj_size_t len);
00443
00450 PJ_IDECL(void) pj_strcat(pj_str_t *dst, const pj_str_t *src);
00451
00452
00459 PJ_IDECL(void) pj_strcat2(pj_str_t *dst, const char *src);
00460
00461
00470 PJ_INLINE(char*) pj_strchr( const pj_str_t *str, int chr)
00471 {
00472 return (char*) memchr((char*)str->ptr, chr, str->slen);
00473 }
00474
00485 PJ_DECL(char*) pj_strstr(const pj_str_t *str, const pj_str_t *substr);
00486
00498 PJ_DECL(char*) pj_stristr(const pj_str_t *str, const pj_str_t *substr);
00499
00507 PJ_DECL(pj_str_t*) pj_strltrim( pj_str_t *str );
00508
00516 PJ_DECL(pj_str_t*) pj_strrtrim( pj_str_t *str );
00517
00525 PJ_IDECL(pj_str_t*) pj_strtrim( pj_str_t *str );
00526
00536 PJ_DECL(char*) pj_create_random_string(char *str, pj_size_t length);
00537
00547 PJ_DECL(unsigned long) pj_strtoul(const pj_str_t *str);
00548
00563 PJ_DECL(unsigned long) pj_strtoul2(const pj_str_t *str, pj_str_t *endptr,
00564 unsigned base);
00565
00575 PJ_DECL(int) pj_utoa(unsigned long val, char *buf);
00576
00590 PJ_DECL(int) pj_utoa_pad( unsigned long val, char *buf, int min_dig, int pad);
00591
00592
00599 PJ_INLINE(void) pj_bzero(void *dst, pj_size_t size)
00600 {
00601 #if defined(PJ_HAS_BZERO) && PJ_HAS_BZERO!=0
00602 bzero(dst, size);
00603 #else
00604 memset(dst, 0, size);
00605 #endif
00606 }
00607
00608
00618 PJ_INLINE(void*) pj_memset(void *dst, int c, pj_size_t size)
00619 {
00620 return memset(dst, c, size);
00621 }
00622
00632 PJ_INLINE(void*) pj_memcpy(void *dst, const void *src, pj_size_t size)
00633 {
00634 return memcpy(dst, src, size);
00635 }
00636
00646 PJ_INLINE(void*) pj_memmove(void *dst, const void *src, pj_size_t size)
00647 {
00648 return memmove(dst, src, size);
00649 }
00650
00660 PJ_INLINE(int) pj_memcmp(const void *buf1, const void *buf2, pj_size_t size)
00661 {
00662 return memcmp(buf1, buf2, size);
00663 }
00664
00675 PJ_INLINE(void*) pj_memchr(const void *buf, int c, pj_size_t size)
00676 {
00677 return (void*)memchr((void*)buf, c, size);
00678 }
00679
00680
00685 #if PJ_FUNCTIONS_ARE_INLINED
00686 # include <pj/string_i.h>
00687 #endif
00688
00689 PJ_END_DECL
00690
00691 #endif
00692