Zycore 1.5.1.0
Loading...
Searching...
No Matches
String.h
Go to the documentation of this file.
1/***************************************************************************************************
2
3 Zyan Core Library (Zycore-C)
4
5 Original Author : Florian Bernd
6
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24
25***************************************************************************************************/
26
32#ifndef ZYCORE_STRING_H
33#define ZYCORE_STRING_H
34
35#include <Zycore/Allocator.h>
36#include <Zycore/Status.h>
37#include <Zycore/Types.h>
38#include <Zycore/Vector.h>
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44/* ============================================================================================== */
45/* Constants */
46/* ============================================================================================== */
47
52#define ZYAN_STRING_MIN_CAPACITY 32
53
57#define ZYAN_STRING_DEFAULT_GROWTH_FACTOR 2
58
62#define ZYAN_STRING_DEFAULT_SHRINK_THRESHOLD 4
63
64/* ============================================================================================== */
65/* Enums and types */
66/* ============================================================================================== */
67
68/* ---------------------------------------------------------------------------------------------- */
69/* String flags */
70/* ---------------------------------------------------------------------------------------------- */
71
75typedef ZyanU8 ZyanStringFlags;
76
80#define ZYAN_STRING_HAS_FIXED_CAPACITY 0x01 // (1 << 0)
81
82/* ---------------------------------------------------------------------------------------------- */
83/* String */
84/* ---------------------------------------------------------------------------------------------- */
85
108
109/* ---------------------------------------------------------------------------------------------- */
110/* View */
111/* ---------------------------------------------------------------------------------------------- */
112
141
142/* ---------------------------------------------------------------------------------------------- */
143
144/* ============================================================================================== */
145/* Macros */
146/* ============================================================================================== */
147
148/* ---------------------------------------------------------------------------------------------- */
149/* General */
150/* ---------------------------------------------------------------------------------------------- */
151
155#define ZYAN_STRING_INITIALIZER \
156 { \
157 /* flags */ 0, \
158 /* vector */ ZYAN_VECTOR_INITIALIZER \
159 }
160
161/* ---------------------------------------------------------------------------------------------- */
162/* Helper macros */
163/* ---------------------------------------------------------------------------------------------- */
164
168#define ZYAN_STRING_TO_VIEW(string) (const ZyanStringView*)(string)
169
175#define ZYAN_DEFINE_STRING_VIEW(string) \
176 { \
177 /* string */ \
178 { \
179 /* flags */ 0, \
180 /* vector */ \
181 { \
182 /* allocator */ ZYAN_NULL, \
183 /* growth_factor */ 1, \
184 /* shrink_threshold */ 0, \
185 /* size */ sizeof(string), \
186 /* capacity */ sizeof(string), \
187 /* element_size */ sizeof(char), \
188 /* destructor */ ZYAN_NULL, \
189 /* data */ (char*)(string) \
190 } \
191 } \
192 }
193
194/* ---------------------------------------------------------------------------------------------- */
195
196/* ============================================================================================== */
197/* Exported functions */
198/* ============================================================================================== */
199
200/* ---------------------------------------------------------------------------------------------- */
201/* Constructor and destructor */
202/* ---------------------------------------------------------------------------------------------- */
203
204#ifndef ZYAN_NO_LIBC
205
223
224#endif // ZYAN_NO_LIBC
225
247 ZyanAllocator* allocator, ZyanU8 growth_factor, ZyanU8 shrink_threshold);
248
263 ZyanUSize capacity);
264
274
275/* ---------------------------------------------------------------------------------------------- */
276/* Duplication */
277/* ---------------------------------------------------------------------------------------------- */
278
279#ifndef ZYAN_NO_LIBC
280
305 const ZyanStringView* source, ZyanUSize capacity);
306
307#endif // ZYAN_NO_LIBC
308
337 const ZyanStringView* source, ZyanUSize capacity, ZyanAllocator* allocator,
338 ZyanU8 growth_factor, ZyanU8 shrink_threshold);
339
361 const ZyanStringView* source, char* buffer, ZyanUSize capacity);
362
363/* ---------------------------------------------------------------------------------------------- */
364/* Concatenation */
365/* ---------------------------------------------------------------------------------------------- */
366
367#ifndef ZYAN_NO_LIBC
368
397 const ZyanStringView* s1, const ZyanStringView* s2, ZyanUSize capacity);
398
399#endif // ZYAN_NO_LIBC
400
433 const ZyanStringView* s2, ZyanUSize capacity, ZyanAllocator* allocator, ZyanU8 growth_factor,
434 ZyanU8 shrink_threshold);
435
460 const ZyanStringView* s1, const ZyanStringView* s2, char* buffer, ZyanUSize capacity);
461
462/* ---------------------------------------------------------------------------------------------- */
463/* Views */
464/* ---------------------------------------------------------------------------------------------- */
465
478 const ZyanStringView* source);
479
494 const ZyanStringView* source, ZyanUSize index, ZyanUSize count);
495
505
516 ZyanUSize length);
517
527
539
540/* ---------------------------------------------------------------------------------------------- */
541/* Character access */
542/* ---------------------------------------------------------------------------------------------- */
543
554 char* value);
555
566 char** value);
567
577ZYCORE_EXPORT ZyanStatus ZyanStringSetChar(ZyanString* string, ZyanUSize index, char value);
578
579/* ---------------------------------------------------------------------------------------------- */
580/* Insertion */
581/* ---------------------------------------------------------------------------------------------- */
582
593 const ZyanStringView* source);
594
608ZYCORE_EXPORT ZyanStatus ZyanStringInsertEx(ZyanString* destination, ZyanUSize destination_index,
609 const ZyanStringView* source, ZyanUSize source_index, ZyanUSize count);
610
611/* ---------------------------------------------------------------------------------------------- */
612/* Appending */
613/* ---------------------------------------------------------------------------------------------- */
614
624
636 ZyanUSize source_index, ZyanUSize count);
637
638/* ---------------------------------------------------------------------------------------------- */
639/* Deletion */
640/* ---------------------------------------------------------------------------------------------- */
641
651ZYCORE_EXPORT ZyanStatus ZyanStringDelete(ZyanString* string, ZyanUSize index, ZyanUSize count);
652
662
671
672/* ---------------------------------------------------------------------------------------------- */
673/* Searching */
674/* ---------------------------------------------------------------------------------------------- */
675
691 const ZyanStringView* needle, ZyanISize* found_index);
692
711 const ZyanStringView* needle, ZyanISize* found_index, ZyanUSize index, ZyanUSize count);
712
728 const ZyanStringView* needle, ZyanISize* found_index);
729
748 const ZyanStringView* needle, ZyanISize* found_index, ZyanUSize index, ZyanUSize count);
749
765 const ZyanStringView* needle, ZyanISize* found_index);
766
785 const ZyanStringView* needle, ZyanISize* found_index, ZyanUSize index, ZyanUSize count);
786
802 const ZyanStringView* needle, ZyanISize* found_index);
803
822 const ZyanStringView* needle, ZyanISize* found_index, ZyanUSize index, ZyanUSize count);
823
824/* ---------------------------------------------------------------------------------------------- */
825/* Comparing */
826/* ---------------------------------------------------------------------------------------------- */
827
846 ZyanI32* result);
847
866 ZyanI32* result);
867
868/* ---------------------------------------------------------------------------------------------- */
869/* Case conversion */
870/* ---------------------------------------------------------------------------------------------- */
871
883
897 ZyanUSize count);
898
910
924 ZyanUSize count);
925
926/* ---------------------------------------------------------------------------------------------- */
927/* Memory management */
928/* ---------------------------------------------------------------------------------------------- */
929
942
955
967
968/* ---------------------------------------------------------------------------------------------- */
969/* Information */
970/* ---------------------------------------------------------------------------------------------- */
971
980ZYCORE_EXPORT ZyanStatus ZyanStringGetCapacity(const ZyanString* string, ZyanUSize* capacity);
981
991ZYCORE_EXPORT ZyanStatus ZyanStringGetSize(const ZyanString* string, ZyanUSize* size);
992
1001ZYCORE_EXPORT ZyanStatus ZyanStringGetData(const ZyanString* string, const char** value);
1002
1003/* ---------------------------------------------------------------------------------------------- */
1004
1005/* ============================================================================================== */
1006
1007#ifdef __cplusplus
1008}
1009#endif
1010
1011#endif // ZYCORE_STRING_H
#define ZYAN_REQUIRES_LIBC
Definition Defines.h:366
#define ZYCORE_EXPORT
Definition Defines.h:235
ZyanU32 ZyanStatus
Definition Status.h:48
ZYCORE_EXPORT ZyanStatus ZyanStringViewInsideViewEx(ZyanStringView *view, const ZyanStringView *source, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanStringViewInsideView(ZyanStringView *view, const ZyanStringView *source)
ZYCORE_EXPORT ZyanStatus ZyanStringToUpperCase(ZyanString *string)
ZYCORE_EXPORT ZyanStatus ZyanStringInitCustomBuffer(ZyanString *string, char *buffer, ZyanUSize capacity)
ZYCORE_EXPORT ZyanStatus ZyanStringDuplicateEx(ZyanString *destination, const ZyanStringView *source, ZyanUSize capacity, ZyanAllocator *allocator, ZyanU8 growth_factor, ZyanU8 shrink_threshold)
ZYCORE_EXPORT ZyanStatus ZyanStringGetData(const ZyanString *string, const char **value)
ZYCORE_EXPORT ZyanStatus ZyanStringRPosI(const ZyanStringView *haystack, const ZyanStringView *needle, ZyanISize *found_index)
ZYCORE_EXPORT ZyanStatus ZyanStringConcatEx(ZyanString *destination, const ZyanStringView *s1, const ZyanStringView *s2, ZyanUSize capacity, ZyanAllocator *allocator, ZyanU8 growth_factor, ZyanU8 shrink_threshold)
ZYCORE_EXPORT ZyanStatus ZyanStringToUpperCaseEx(ZyanString *string, ZyanUSize index, ZyanUSize count)
struct ZyanStringView_ ZyanStringView
ZYCORE_EXPORT ZyanStatus ZyanStringDestroy(ZyanString *string)
ZYCORE_EXPORT ZyanStatus ZyanStringToLowerCase(ZyanString *string)
ZYCORE_EXPORT ZyanStatus ZyanStringCompareI(const ZyanStringView *s1, const ZyanStringView *s2, ZyanI32 *result)
ZYCORE_EXPORT ZYAN_REQUIRES_LIBC ZyanStatus ZyanStringInit(ZyanString *string, ZyanUSize capacity)
ZYCORE_EXPORT ZyanStatus ZyanStringRPosIEx(const ZyanStringView *haystack, const ZyanStringView *needle, ZyanISize *found_index, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanStringInsertEx(ZyanString *destination, ZyanUSize destination_index, const ZyanStringView *source, ZyanUSize source_index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanStringReserve(ZyanString *string, ZyanUSize capacity)
struct ZyanString_ ZyanString
ZYCORE_EXPORT ZyanStatus ZyanStringGetCapacity(const ZyanString *string, ZyanUSize *capacity)
ZYCORE_EXPORT ZyanStatus ZyanStringViewInsideBuffer(ZyanStringView *view, const char *string)
ZYCORE_EXPORT ZyanStatus ZyanStringViewInsideBufferEx(ZyanStringView *view, const char *buffer, ZyanUSize length)
ZYCORE_EXPORT ZyanStatus ZyanStringLPos(const ZyanStringView *haystack, const ZyanStringView *needle, ZyanISize *found_index)
ZYCORE_EXPORT ZyanStatus ZyanStringRPosEx(const ZyanStringView *haystack, const ZyanStringView *needle, ZyanISize *found_index, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanStringGetChar(const ZyanStringView *string, ZyanUSize index, char *value)
ZYCORE_EXPORT ZyanStatus ZyanStringToLowerCaseEx(ZyanString *string, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanStringConcatCustomBuffer(ZyanString *destination, const ZyanStringView *s1, const ZyanStringView *s2, char *buffer, ZyanUSize capacity)
ZYCORE_EXPORT ZyanStatus ZyanStringCompare(const ZyanStringView *s1, const ZyanStringView *s2, ZyanI32 *result)
ZYCORE_EXPORT ZyanStatus ZyanStringClear(ZyanString *string)
ZYCORE_EXPORT ZYAN_REQUIRES_LIBC ZyanStatus ZyanStringConcat(ZyanString *destination, const ZyanStringView *s1, const ZyanStringView *s2, ZyanUSize capacity)
ZYCORE_EXPORT ZyanStatus ZyanStringViewGetData(const ZyanStringView *view, const char **buffer)
ZYCORE_EXPORT ZyanStatus ZyanStringLPosEx(const ZyanStringView *haystack, const ZyanStringView *needle, ZyanISize *found_index, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanStringResize(ZyanString *string, ZyanUSize size)
ZYCORE_EXPORT ZyanStatus ZyanStringViewGetSize(const ZyanStringView *view, ZyanUSize *size)
ZYCORE_EXPORT ZyanStatus ZyanStringDuplicateCustomBuffer(ZyanString *destination, const ZyanStringView *source, char *buffer, ZyanUSize capacity)
ZYCORE_EXPORT ZyanStatus ZyanStringLPosI(const ZyanStringView *haystack, const ZyanStringView *needle, ZyanISize *found_index)
ZYCORE_EXPORT ZyanStatus ZyanStringGetCharMutable(ZyanString *string, ZyanUSize index, char **value)
ZYCORE_EXPORT ZyanStatus ZyanStringLPosIEx(const ZyanStringView *haystack, const ZyanStringView *needle, ZyanISize *found_index, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanStringGetSize(const ZyanString *string, ZyanUSize *size)
ZYCORE_EXPORT ZyanStatus ZyanStringAppendEx(ZyanString *destination, const ZyanStringView *source, ZyanUSize source_index, ZyanUSize count)
ZyanU8 ZyanStringFlags
Definition String.h:75
ZYCORE_EXPORT ZyanStatus ZyanStringInsert(ZyanString *destination, ZyanUSize index, const ZyanStringView *source)
ZYCORE_EXPORT ZyanStatus ZyanStringSetChar(ZyanString *string, ZyanUSize index, char value)
ZYCORE_EXPORT ZYAN_REQUIRES_LIBC ZyanStatus ZyanStringDuplicate(ZyanString *destination, const ZyanStringView *source, ZyanUSize capacity)
ZYCORE_EXPORT ZyanStatus ZyanStringShrinkToFit(ZyanString *string)
ZYCORE_EXPORT ZyanStatus ZyanStringRPos(const ZyanStringView *haystack, const ZyanStringView *needle, ZyanISize *found_index)
ZYCORE_EXPORT ZyanStatus ZyanStringInitEx(ZyanString *string, ZyanUSize capacity, ZyanAllocator *allocator, ZyanU8 growth_factor, ZyanU8 shrink_threshold)
ZYCORE_EXPORT ZyanStatus ZyanStringTruncate(ZyanString *string, ZyanUSize index)
ZYCORE_EXPORT ZyanStatus ZyanStringDelete(ZyanString *string, ZyanUSize index, ZyanUSize count)
ZYCORE_EXPORT ZyanStatus ZyanStringAppend(ZyanString *destination, const ZyanStringView *source)
Definition Allocator.h:89
Definition String.h:132
ZyanString string
Definition String.h:139
Definition String.h:98
ZyanVector vector
Definition String.h:106
ZyanStringFlags flags
Definition String.h:102
Definition Vector.h:76