Files
handleaiuinew/env/LMI/include/kApi/Data/kString.x.h
T
2024-05-18 23:53:26 +08:00

71 lines
2.4 KiB
C

/**
* @file kString.x.h
*
* @internal
* Copyright (C) 2005-2021 by LMI Technologies Inc.
* Licensed under the MIT License.
* Redistributed files must retain the above copyright notice.
*/
#ifndef K_API_STRING_X_H
#define K_API_STRING_X_H
#define xkSTRING_MIN_CAPACITY (16)
#define xkSTRING_GROWTH_FACTOR (2)
typedef struct kStringClass
{
kObjectClass base;
kSize allocSize; //size of allocated array memory, in bytes
kChar* chars; //null-terminated character array
kSize length; //current number of elements (excluding null-terminator)
kSize capacity; //maximum elements before reallocation
kChar nullStr; //null string (avoids need for dynamic allocation when null content pointer passed)
} kStringClass;
kDeclareClassEx(k, kString, kObject)
/*
* Forward declarations.
*/
kFx(kStatus) kString_Set(kString str, const kChar* content);
kFx(kStatus) kString_Add(kString str, const kChar* content);
kFx(kStatus) kString_SplitEx(kString str, const kChar* delimiters, kArrayList* tokens, kBool discardEmpty, kAlloc allocator);
/*
* Private methods.
*/
kFx(kStatus) xkString_ConstructFramework(kString* string, kAlloc allocator);
kFx(kStatus) xkString_Init(kString str, kType classType, const kChar* content, kAlloc allocator);
kFx(kStatus) xkString_VClone(kString str, kString source, kAlloc valueAlloc, kObject context);
kFx(kStatus) xkString_VRelease(kString str);
kFx(kSize) xkString_VHashCode(kString str);
kFx(kBool) xkString_VEquals(kString str, kObject other);
kFx(kSize) xkString_VSize(kString str);
kFx(kStatus) xkString_WriteDat5V1(kString str, kSerializer serializer);
kFx(kStatus) xkString_ReadDat5V1(kString str, kSerializer serializer);
kFx(kStatus) xkString_WriteDat6V0(kString str, kSerializer serializer);
kFx(kStatus) xkString_ReadDat6V0(kString str, kSerializer serializer);
kFx(kStatus) xkString_SplitAdd(const kChar* start, kSize length, kArrayList tokens, kAlloc allocator, kBool discardEmpty);
/*
* Deprecated (Stage 1): not recommended for further use, but not yet announced via kDeprecate
*/
//[Deprecated] Use either kString_Add (append == kTRUE) or kString_Set (append == kFALSE)
kInlineFx(kStatus) kString_Import(kString str, const kChar* cstr, kBool append)
{
if (append) return kString_Add(str, cstr);
else return kString_Set(str, cstr);
}
#endif