00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _ATX_STRINGS_H_
00011 #define _ATX_STRINGS_H_
00012
00013
00014
00015
00016 #include "AtxConfig.h"
00017 #include "AtxTypes.h"
00018
00019
00020
00021
00022 #define ATX_STRING_SEARCH_FAILED (-1)
00023 #define ATX_EMPTY_STRING {0}
00024
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028 extern const char* const ATX_String_EmptyString;
00029 #ifdef __cplusplus
00030 }
00031 #endif
00032
00033
00034
00035
00036 typedef struct {
00037 char* chars;
00038 } ATX_String;
00039
00040 typedef struct {
00041 ATX_Cardinal length;
00042 ATX_Cardinal allocated;
00043
00044 } ATX_StringBuffer;
00045
00046
00047
00048
00049 #define ATX_String_GetBuffer(str) ( ((ATX_StringBuffer*)((str)->chars))-1 )
00050 #define ATX_String_Construct(str) do { \
00051 (str)->chars = NULL; \
00052 } while(0)
00053 #define ATX_String_Destruct(str) do { \
00054 if ((str)->chars) { \
00055 ATX_FreeMemory((void*)ATX_String_GetBuffer((str))); \
00056 (str)->chars = NULL; \
00057 } \
00058 } while(0)
00059 #define ATX_String_GetChar(str, index) ((str)->chars[(index)])
00060 #define ATX_String_SetChar(str, index, c) do { \
00061 (str)->chars[(index)] = (c); \
00062 }
00063 #define ATX_String_GetLength(str) ((str)->chars?(ATX_String_GetBuffer(str)->length):0)
00064 #define ATX_String_GetChars(str) ((str)->chars?(const char*)((str)->chars):ATX_String_EmptyString)
00065 #define ATX_String_UseChars(str) ((str)->chars?(str)->chars:(char*)ATX_String_EmptyString)
00066 #define ATX_CSTR(str) ATX_String_GetChars(&(str))
00067 #define ATX_String_IsEmpty(str) (ATX_String_GetLength((str))==0)
00068 #define ATX_INIT_STRING(s) do {(s).chars = NULL; } while(0)
00069
00070
00071
00072
00073 #ifdef __cplusplus
00074 extern "C" {
00075 #endif
00076
00077 extern ATX_String
00078 ATX_String_Create(const char* s);
00079
00080 extern ATX_String
00081 ATX_String_CreateFromSubString(const char* s, ATX_Ordinal first, ATX_Size length);
00082
00083 extern ATX_String
00084 ATX_String_Clone(const ATX_String* str);
00085
00086 extern void
00087 ATX_String_Copy(ATX_String* str, const ATX_String* other);
00088
00089 extern ATX_Result
00090 ATX_String_SetLength(ATX_String* str, ATX_Size length);
00091
00092 extern ATX_Result
00093 ATX_String_Assign(ATX_String* str, const char* chars);
00094
00095 extern ATX_Result
00096 ATX_String_AssignN(ATX_String* str, const char* chars, ATX_Size size);
00097
00098 extern ATX_Result
00099 ATX_String_Append(ATX_String* str, const char* other);
00100
00101 extern ATX_Result
00102 ATX_String_AppendSubString(ATX_String* str, const char* other, ATX_Size size);
00103
00104 extern ATX_Result
00105 ATX_String_AppendChar(ATX_String* str, char c);
00106
00107 extern ATX_String
00108 ATX_String_Add(const ATX_String* str1, const char* str2);
00109
00110 extern int
00111 ATX_String_Compare(const ATX_String* str, const char* s, ATX_Boolean ignore_case);
00112
00113 extern ATX_Boolean
00114 ATX_String_Equals(const ATX_String* str, const char* s, ATX_Boolean ignore_case);
00115
00116 extern ATX_String
00117 ATX_String_SubString(const ATX_String* str, ATX_Ordinal first, ATX_Size length);
00118
00119 extern ATX_String
00120 ATX_String_Left(const ATX_String* str, ATX_Size length);
00121
00122 extern ATX_String
00123 ATX_String_Right(const ATX_String* str, ATX_Size length);
00124
00125 extern ATX_Result
00126 ATX_String_Reserve(ATX_String* str, ATX_Size length);
00127
00128 extern ATX_String
00129 ATX_String_ToLowercase(const ATX_String* str);
00130
00131 extern ATX_String
00132 ATX_String_ToUppercase(const ATX_String* str);
00133
00134 extern ATX_Result
00135 ATX_String_ToInteger(const ATX_String* str, long* value, ATX_Boolean relaxed);
00136
00137 extern ATX_Result
00138 ATX_String_ToFloat(const ATX_String* str, float* value, ATX_Boolean relaxed);
00139
00140 extern void
00141 ATX_String_MakeLowercase(ATX_String* str);
00142
00143 extern void
00144 ATX_String_MakeUppercase(ATX_String* str);
00145
00146 extern void
00147 ATX_String_Replace(ATX_String* str, char a, char b);
00148
00149 extern int
00150 ATX_String_FindChar(const ATX_String* str, char c);
00151
00152 extern int
00153 ATX_String_FindCharFrom(const ATX_String* str, char c, ATX_Ordinal start);
00154
00155 extern int
00156 ATX_String_FindString(const ATX_String* str, const char* s);
00157
00158 extern int
00159 ATX_String_FindStringFrom(const ATX_String* str, const char* s, ATX_Ordinal start);
00160
00161 extern int
00162 ATX_String_ReverseFindChar(const ATX_String* str, char c);
00163
00164 extern int
00165 ATX_String_ReverseFindCharFrom(const ATX_String* str, char c, ATX_Ordinal start);
00166
00167 extern int
00168 ATX_String_ReverseFindString(const ATX_String* str, const char* s);
00169
00170 extern int
00171 ATX_String_ReverseFindStringFrom(const ATX_String* str, const char* s, ATX_Ordinal start);
00172
00173 extern ATX_Boolean
00174 ATX_String_StartsWith(const ATX_String* str, const char* s);
00175
00176 extern ATX_Boolean
00177 ATX_String_EndsWith(const ATX_String* str, const char* s);
00178
00179 extern void
00180 ATX_String_TrimWhitespaceLeft(ATX_String* str);
00181
00182 extern void
00183 ATX_String_TrimCharLeft(ATX_String* str, char c);
00184
00185 extern void
00186 ATX_String_TrimCharsLeft(ATX_String* str, const char* chars);
00187
00188 extern void
00189 ATX_String_TrimWhitespaceRight(ATX_String* str);
00190
00191 extern void
00192 ATX_String_TrimCharRight(ATX_String* str, char c);
00193
00194 extern void
00195 ATX_String_TrimCharsRight(ATX_String* str, const char* chars);
00196
00197 extern void
00198 ATX_String_TrimWhitespace(ATX_String* str);
00199
00200 extern void
00201 ATX_String_TrimChar(ATX_String* str, char c);
00202
00203 extern void
00204 ATX_String_TrimChars(ATX_String* str, const char* chars);
00205
00206 extern ATX_Result
00207 ATX_String_Insert(ATX_String* str, const char* s, ATX_Ordinal where);
00208
00209
00210
00211
00212 #ifdef __cplusplus
00213 }
00214 #endif
00215
00216 #endif
00217