kmp_str.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #ifndef KMP_STR_H
00048 #define KMP_STR_H
00049
00050 #include <string.h>
00051 #include <stdarg.h>
00052
00053 #include "kmp_os.h"
00054
00055 #ifdef __cplusplus
00056 extern "C" {
00057 #endif // __cplusplus
00058
00059 #if KMP_OS_WINDOWS
00060 #define strdup _strdup
00061 #define snprintf _snprintf
00062 #define vsnprintf _vsnprintf
00063 #endif
00064
00065
00066 #define TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) + 'a' - 'A') : (c))
00067
00068 struct kmp_str_buf {
00069 char * str;
00070 int size;
00071 int used;
00072 char bulk[ 512 ];
00073 };
00074 typedef struct kmp_str_buf kmp_str_buf_t;
00075
00076 #define __kmp_str_buf_init( b ) { (b)->str = (b)->bulk; (b)->size = sizeof( (b)->bulk ); (b)->used = 0; (b)->bulk[ 0 ] = 0; }
00077
00078 void __kmp_str_buf_clear( kmp_str_buf_t * buffer );
00079 void __kmp_str_buf_reserve( kmp_str_buf_t * buffer, int size );
00080 void __kmp_str_buf_detach( kmp_str_buf_t * buffer );
00081 void __kmp_str_buf_free( kmp_str_buf_t * buffer );
00082 void __kmp_str_buf_cat( kmp_str_buf_t * buffer, char const * str, int len );
00083 void __kmp_str_buf_vprint( kmp_str_buf_t * buffer, char const * format, va_list args );
00084 void __kmp_str_buf_print( kmp_str_buf_t * buffer, char const * format, ... );
00085 void __kmp_str_buf_print_size( kmp_str_buf_t * buffer, size_t size );
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 struct kmp_str_fname {
00097 char * path;
00098 char * dir;
00099 char * base;
00100 };
00101 typedef struct kmp_str_fname kmp_str_fname_t;
00102 void __kmp_str_fname_init( kmp_str_fname_t * fname, char const * path );
00103 void __kmp_str_fname_free( kmp_str_fname_t * fname );
00104
00105 int __kmp_str_fname_match( kmp_str_fname_t const * fname, char const * pattern );
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 struct kmp_str_loc {
00120 char * _bulk;
00121 kmp_str_fname_t fname;
00122 char * file;
00123 char * func;
00124 int line;
00125 int col;
00126 };
00127 typedef struct kmp_str_loc kmp_str_loc_t;
00128 kmp_str_loc_t __kmp_str_loc_init( char const * psource, int init_fname );
00129 void __kmp_str_loc_free( kmp_str_loc_t * loc );
00130
00131 int __kmp_str_eqf( char const * lhs, char const * rhs );
00132 char * __kmp_str_format( char const * format, ... );
00133 void __kmp_str_free( char const * * str );
00134 int __kmp_str_match( char const * target, int len, char const * data );
00135 int __kmp_str_match_false( char const * data );
00136 int __kmp_str_match_true( char const * data );
00137 void __kmp_str_replace( char * str, char search_for, char replace_with );
00138 void __kmp_str_split( char * str, char delim, char ** head, char ** tail );
00139 char * __kmp_str_token( char * str, char const * delim, char ** buf );
00140 int __kmp_str_to_int( char const * str, char sentinel );
00141
00142 void __kmp_str_to_size( char const * str, size_t * out, size_t dfactor, char const * * error );
00143 void __kmp_str_to_uint( char const * str, kmp_uint64 * out, char const * * error );
00144
00145 #ifdef __cplusplus
00146 }
00147 #endif // __cplusplus
00148
00149 #endif // KMP_STR_H
00150
00151
00152