|
mdz_unicode Overview and Referencemdz_unicode - very lightweight and versatile C library for handling Unicode strings. Source code of library is highly-portable, conforms to ANSI C 89/90 Standard. Builds for Win32/Win64, Linux, FreeBSD, Android, macOS are available. Summary: Basically, conversion of Unicode strings between ANSI, UTF8, UTF16-LE, UTF16-BE, UTF32-LE and UTF32-BE formats are possible. This all with ANSI C89/90 conforming code, without any further dependencies! mdz_unicode Advantages 1. High portability: the whole code conforms to ANSI C 89/90 Standard. Multithreading/asynchronous part is POSIX compatible (under UNIX/Linux). 2. Little dependencies: basically, mdz_unicode functions are only dependent on standard C-library memory-management/access functions. Multithreading part is dependent on POSIX pthreads API (under UNIX/Linux) and old process control/synchronization API (from Windows 2000). It means you can use library in your code without any further dependencies except standard platform libraries/APIs. 3. Extended error-checking: all functions preserve internal error-code pointing the problem. It is possible to use strict error-checking (when all preserved error-codes should be MDZ_ERROR_NONE) or "relaxed"-checking - when only returned mdz_false will indicate error. 4. Extended control: string do only explicit operations. It means for example, when "insert" function is called - it will return error if there is not enough capacity in string. No implicit reservations will be made. 5. Attached usage: string should not necessarily use dynamically-allocated memory - which may be not available on your embedded system (or if malloc()/free() are forbidden to use in you safety-critical software). Just attach string/data to your statically-allocated memory and use all string functionality. 6. Cache-friendly: it is possible to keep controlling and data parts together in memory using "embedded part". 7. Unicode support: UTF-8, UTF-16, UTF-32 are supported. 8. wchar_t support: also wchar_t strings are supported, with 2 and 4 bytes-large wchar_t characters. 9. Endianness-aware strings: utf16 and utf32 strings are endiannes-aware thus may be used to produce and manipulate strings with pre-defined endianness even if endianness of host differs. 10. Unicode "surrogate-pairs" awareness: 2-byte Unicode strings correctly process/distinguish "surrogate-pairs" as 1 Unicode symbol. 11. Asynchronous execution: insert functions can be executed asynchronously. Please refer to mdz_unicode Wiki for API details.
mdz_unicode API Referencemdz_wchar Reference mdz_utf8 Reference mdz_utf16 Reference mdz_utf32 ReferenceAsynchronous executionMany functions of mdz_unicode accept parameters for asynchronous execution. The only relevant parameter is: - struct mdz_asyncData* pAsyncData - pointer to shared async data for asynchronous call, or NULL if call should be synchronous Fields of struct mdz_asyncData* are following: Type | Parameter | Description | void* | m_pString | Pointer to string instance | mdz_bool | m_bFinished | mdz_true if the call is completely finished. Otherwise mdz_false (if interrupted/cancelled) | size_t | m_nResult | Result of call. Invalid if call is not completely finished (m_bFinished is mdz_false ) | void* | m_pData | Additional data returned by call (if any). Invalid if call is not completely finished (m_bFinished is mdz_false ) | mdz_bool | m_bCancel | Should be set by client in mdz_true during call execution, to cancel the call. Otherwise mdz_false | pthread_t / HANDLE | m_hThread | Handle to thread on which the call is executed. May be used by client for wait operations |
mdz_unicode initialization functions.
Initializes unicode library. This function should be called before any other function of the library.mdz_bool mdz_unicode_init(const uint32_t* pFirstNameHash, const uint32_t* pLastNameHash, const uint32_t* pEmailHash, const uint32_t* pLicenseHash); Parameter | Description |
---|
pFirstNameHash | user first name hash code | pLastNameHash | user last name hash code | pEmailHash | user e-mail hash code | pLicenseHash | license hash code |
Return | Description |
---|
mdz_true | if the initialization has succeed, otherwise false | mdz_unicode Reference Initializes unicode library. This function should be caled before any other function of the library. Memory for license data starts at position pStart . Size of internal initialization structure is returned in pSize.mdz_bool mdz_unicode_init_attached(const uint32_t* pFirstNameHash, const uint32_t* pLastNameHash, const uint32_t* pEmailHash, const uint32_t* pLicenseHash, const char* pStart, size_t nAreaSize, size_t* pOutSize); Parameter | Description |
---|
pFirstNameHash | user first name hash code | pLastNameHash | user last name hash code | pEmailHash | user e-mail hash code | pLicenseHash | license hash code | pStart | memory start position of license data | nAreaSize | size of available memory from pStart in bytes. Should be large enough for license data (> 500 bytes) | pOutSize | actual size of placed license data in bytes |
Return | Description |
---|
mdz_true | if the initialization has succeed, otherwise false | mdz_unicode Reference Un-initializes unicode library and frees corresponding memory allocations.void mdz_unicode_uninit(void); mdz_unicode Reference
mdz_wchar is dynamically-sized contiguous string, containing C wchar_t characters.
Capacity - how many "wide"-characters memory is reserved for.
Size - how many "wide"-characters are actually used in a string, excluding terminating 0.
Length - actual length of string in symbols, excluding terminating 0. "surrogate pairs" count as 1 symbol. "reserve/AndReserve" functions allocate/reallocate memory dynamically using malloc() /realloc() . "attach" functionality allows attaching contiguous block of memory to string, for using string functions on it.
UTF-16 "surrogate pairs" are supported and checked. Unicode "combining characters" are not specially-distinguished and counted as distinct symbols. Endianness of bytes in "wide"-character - is always endianness of platform.
Size of wchar_t in bytes - is compiler-dependend. At the moment, library supports only wchar_t with size of 2 or 4 bytes.
Init and destroy functions:mdz_wchar_create mdz_wchar_create_attached mdz_wchar_destroy mdz_wchar_clear mdz_wchar_attachDataReserve capacity functions:mdz_wchar_reserve mdz_wchar_capacity mdz_wchar_size mdz_wchar_length mdz_wchar_sizeof mdz_wchar_offsetFromStart mdz_wchar_isAttachedData mdz_wchar_embedSizeInsert/remove functions:mdz_wchar_insertWchar_async mdz_wchar_insertWchar_string_async mdz_wchar_insertAnsi_async mdz_wchar_insertAnsi_string_async mdz_wchar_insertUtf8_async mdz_wchar_insertUtf8_string_async mdz_wchar_insertUtf16_async mdz_wchar_insertUtf16_string_async mdz_wchar_insertUtf32_async mdz_wchar_insertUtf32_string_async Create empty "wide"-character string with Capacity == 1 (for 0-terminator), Size == 0 and Length == 0.struct mdz_Wchar* mdz_wchar_create(size_t nEmbedSize); Parameter | Description |
---|
nEmbedSize | size of "embedded part" of string. There is no "embedded part" if 0 |
Return | Description |
---|
NULL | if library is not initialized with mdz_unicode_init() call | NULL | if memory allocation failed | NULL | if sizeof(wchar_t ) != 2 (see description in file header) | Result | pointer to string for use in other mdz_wchar functions | mdz_wchar Reference Create empty "wide"-character string with Capacity == 1 (for 0-terminator), Size == 0 and Length == 0. Memory for wchar structure starts at position pStart . Size of internal wchar structure (it is usually bigger than mdz_Wchar !) is returned in pSize.struct mdz_Wchar* mdz_wchar_create_attached(const void* pStart, size_t nAreaSizeBytes, size_t* pOutSize); Parameter | Description |
---|
pStart | memory start position of wchar structure | nAreaSizeBytes | size of available memory from pStart in bytes. Should be large enough for internal wchar structure | pOutSize | returned actual size of allocated internal wchar structure in bytes, may be NULL if not needed |
Return | Description |
---|
NULL | if library is not initialized with mdz_unicode_init() call | NULL | if sizeof(wchar_t ) != 2 and sizeof(wchar_t ) != 4 (see description in file header) | NULL | if pStart == NULL or pSize == NULL | NULL | if size in nSize is smaller than size of internal wchar structure | Result | pointer to string for use in other mdz_wchar functions. Normally it equals to pStart | mdz_wchar Reference Destroy "wide"-character string including underlying data. After destroying, pointer to string is set to NULL . If wchar is attached using mdz_wchar_createAttached(), free() will not be called. If wchar data is attached using mdz_wchar_attachData() , m_pData will not be destroyed.void mdz_wchar_destroy(struct mdz_Wchar** ppWchar); Parameter | Description |
---|
ppWchar | pointer to pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | mdz_wchar Reference Clear m_pData of "wide"-character string with setting Size in 0.void mdz_wchar_clear(struct mdz_Wchar* pWchar); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() | mdz_wchar Reference Attach pre-allocated data to string, assigning pData to m_pData . If attached, m_pData will not be destroyed in mdz_wchar_destroy() mdz_bool mdz_wchar_attachData(struct mdz_Wchar* pWchar, wchar_t* pData, size_t nOffsetFromStart, size_t nCapacity, enum mdz_attach_type enAttachType); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | pData | pointer to pre-allocated data to attach | nOffsetFromStart | position in pre-allocated data to attach from. Can be > 0 | nCapacity | full capacity pre-allocated data in items | enAttachType | type of attachment. 0 is expected at position pData [nOffsetFromStart ] if MDZ_ATTACH_ZEROSIZE . 0 is expected at position pData [nCapacity ] if MDZ_ATTACH_SIZE_TERMINATOR . MDZ_ATTACH_SIZE_NO_TERMINATOR is not allowed |
Return | Description |
---|
mdz_false | if pWchar == NULL | mdz_false | if pData == NULL (MDZ_ERROR_DATA), or nOffsetFromStart >= nCapacity (MDZ_ERROR_OFFSET), or invalid enAttachType (MDZ_ERROR_ATTACHTYPE) | mdz_false | if enAttachType is MDZ_ATTACH_ZEROSIZE or MDZ_ATTACH_SIZE_TERMINATOR but 0 is not found at expected position (MDZ_ERROR_ATTACH_TERMINATOR) | mdz_false | if enAttachType == MDZ_ATTACH_SIZE_TERMINATOR and pData contains invalid "wide"-characters (MDZ_ERROR_CONTENT) | mdz_true | operation succeeded | mdz_wchar Reference Reserve nNewCapacity bytes for string. Size and Length do not change.mdz_bool mdz_wchar_reserve(struct mdz_Wchar* pWchar, size_t nNewCapacity); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nNewCapacity | new capacity in "wide"-characters to reserve |
Return | Description |
---|
mdz_false | if pWchar == NULL | mdz_false | if memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_true | reservation succeeded, or nNewCapacity <= Capacity (MDZ_ERROR_CAPACITY) | mdz_wchar Reference Return string Capacity in "wide"-characters.size_t mdz_wchar_capacity(const struct mdz_Wchar* pWchar); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() |
Return | Description |
---|
SIZE_MAX | if pWchar == NULL | Capacity | otherwise | mdz_wchar Reference Return string Size in "wide"-characters.size_t mdz_wchar_size(const struct mdz_Wchar* pWchar); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() |
Return | Description |
---|
SIZE_MAX | if pWchar == NULL | Size | otherwise | mdz_wchar Reference Return string Length in symbols.size_t mdz_wchar_length(const struct mdz_Wchar* pWchar); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() |
Return | Description |
---|
SIZE_MAX | if pWchar == NULL | Length | otherwise | mdz_wchar Reference Return sizeof(wchar_t ) of string in bytes.size_t mdz_wchar_sizeof(const struct mdz_Wchar* pWchar); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() |
Return | Description |
---|
SIZE_MAX | if pWchar == NULL | sizeof(wchar_t ) in bytes | otherwise | mdz_wchar Reference Return string OffsetFromStart in "wide"-characters.size_t mdz_wchar_offsetFromStart(const struct mdz_Wchar* pWchar); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() |
Return | Description |
---|
SIZE_MAX | if pWchar == NULL | OffsetFromStart | otherwise | mdz_wchar Reference Return if string data is attached.mdz_bool mdz_wchar_isAttachedData(const struct mdz_Wchar* pWchar); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() |
Return | Description |
---|
mdz_false | if pWchar == NULL | mdz_false | if string data is not attached | mdz_true | if string data is attached | mdz_wchar Reference Return string "embedded part" Size in "wide" characters.size_t mdz_wchar_embedSize(const struct mdz_Wchar* pWchar); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() |
Return | Description |
---|
SIZE_MAX | if pWchar == NULL | Result | "embedded part" Size otherwise | mdz_wchar Reference Insert nCount "wide"-characters pwcItems in string. Size grows on nCount . Length grows on symbols count. String reserved area and pwcItems should not overlap.mdz_bool mdz_wchar_insertWchar_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const wchar_t* pwcItems, size_t nCount, size_t nWcharSize, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertWchar(pWchar, nLeftPos, pwcItems, nCount, nWcharSize, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pwcItems | "wide"-characters to insert | nCount | number of "wide"-characters to insert | nWcharSize | size of pwcItems wchar_t character in bytes | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if nWcharSize is not 2 or 4 (MDZ_ERROR_WCHAR_SIZE) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pwcItems contain invalid "wide"-character(s) (MDZ_ERROR_CONTENT) | mdz_false | if string reserved area and pwcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pwcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert "wide"-characters string pWcharSource in string. Size grows on nCount. Length grows on symbols count. String reserved area and pWcharSource ->m_pData should not overlap.mdz_bool mdz_wchar_insertWchar_string_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const struct mdz_Wchar* pWcharSource, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertWchar_string(pWchar, nLeftPos, pWcharSource, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pWcharSource | pointer to "wide"-characters string to insert. String is returned by mdz_wchar_create() or mdz_wchar_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pWcharSource ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pWcharSource == NULL (MDZ_ERROR_SOURCE), or pWcharSource .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert nCount ASCII/ANSI bytes in string. Characters are converted to "wide"-characters before isertion. Size grows on added "wide"-characters count. Length grows on added symbols count. String reserved area and pcItems should not overlap.mdz_bool mdz_wchar_insertAnsi_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const unsigned char* pcItems, size_t nCount, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertAnsi(pWchar, nLeftPos, pcItems, nCount, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pcItems | bytes to insert | nCount | number of bytes to insert | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert ASCII/ANSI string pAnsiSource in string. Characters are converted to "wide"-characters before isertion. Size grows on added "wide"-characters count. Length grows on added symbols count. String reserved area and pAnsiSource ->m_pData should not overlap.mdz_bool mdz_wchar_insertAnsi_string_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const void* pAnsiSource, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertAnsi_string(pWchar, nLeftPos, pAnsiSource, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pAnsiSource | pointer to ASCII/ANSI string to insert. String is returned by mdz_ansi_create() or mdz_ansi_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pAnsiSource ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pAnsiSource == NULL (MDZ_ERROR_SOURCE), or pAnsiSource .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert nCount UTF-8 characters in string. UTF-8 characters are converted to "wide"-characters before isertion. Size grows on added "wide"-characters count. Length grows on added symbols count. String reserved area and pcItems should not overlap.mdz_bool mdz_wchar_insertUtf8_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const unsigned char* pcItems, size_t nCount, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertUtf8(pWchar, nLeftPos, pcItems, nCount, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pcItems | UTF-8 characters to insert | nCount | number of UTF-8 characters to insert in bytes | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pcItems contain invalid UTF-8 character(s) (MDZ_ERROR_CONTENT) | mdz_false | if string reserved area and pcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert UTF-8 string pUtf8Source in string. UTF-8 characters are converted to "wide"-characters before isertion. Size grows on added "wide"-characters count. Length grows on added symbols count. String reserved area and pUtf8Source ->m_pData should not overlap.mdz_bool mdz_wchar_insertUtf8_string_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const void* pUtf8Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertUtf8_string(pWchar, nLeftPos, pUtf8Source, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf8Source | pointer to UTF-8 string to insert. String is returned by mdz_utf8_create() or mdz_utf8_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf8Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf8Source == NULL (MDZ_ERROR_SOURCE), or pUtf8Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert nCount UTF-16 characters in string. UTF-16 characters are converted to "wide"-characters before isertion. Size grows on added "wide"-characters count. Length grows on added symbols count. String reserved area and pItems should not overlap.mdz_bool mdz_wchar_insertUtf16_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const uint16_t* pItems, size_t nCount, enum mdz_endianness enEndianness, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertUtf16(pWchar, nLeftPos, pItems, nCount, enEndianness, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pItems | UTF-16 characters to insert | nCount | number of UTF-16 characters to insert | enEndianness | endianness of UTF-16 characters in pItems . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pItems contain invalid UTF-16 character(s) (MDZ_ERROR_CONTENT), or invalid enEndianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if string reserved area and pItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert UTF-16 string pUtf16Source in string. UTF-16 characters are converted to "wide"-characters before isertion. Size grows on added "wide"-characters count. Length grows on added symbols count. String reserved area and pUtf16Source ->m_pData should not overlap.mdz_bool mdz_wchar_insertUtf16_string_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const void* pUtf16Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertUtf16_string(pWchar, nLeftPos, pUtf16Source, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf16Source | pointer to UTF-16 string to insert. String is returned by mdz_utf16_create() or mdz_utf16_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf16Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf16Source == NULL (MDZ_ERROR_SOURCE), or pUtf16Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert nCount UTF-32 characters in string. UTF-32 characters are converted to "wide"-characters before isertion. Size grows on added "wide"-characters count. Length grows on added symbols count. String reserved area and pItems should not overlap.mdz_bool mdz_wchar_insertUtf32_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const uint32_t* pItems, size_t nCount, enum mdz_endianness enEndianness, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertUtf32(pWchar, nLeftPos, pItems, nCount, enEndianness, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pItems | UTF-32 characters to insert | nCount | number of UTF-32 characters to insert | enEndianness | endianness of UTF-32 characters in pItems . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pItems contain invalid UTF-32 character(s) (MDZ_ERROR_CONTENT), or invalid enEndianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if string reserved area and pItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference Insert UTF-32 string pUtf32Source in string. UTF-32 characters are converted to "wide"-characters before isertion. Size grows on added "wide"-characters count. Length grows on added symbols count. String reserved area and pUtf32Source ->m_pData should not overlap.mdz_bool mdz_wchar_insertUtf32_string_async(struct mdz_Wchar* pWchar, size_t nLeftPos, const void* pUtf32Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_wchar_insertUtf32_string(pWchar, nLeftPos, pUtf32Source, bReserve); Parameter | Description |
---|
pWchar | pointer to string returned by mdz_wchar_create() or mdz_wchar_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf32Source | pointer to UTF-32 string to insert. String is returned by mdz_utf32_create() or mdz_utf32_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pWchar is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_wchar_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf32Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf32Source == NULL (MDZ_ERROR_SOURCE), or pUtf32Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_wchar Reference
mdz_utf8 is dynamically-sized contiguous string, containing UTF-8 characters
If only ASCII/ANSI characters should be stored/processed - use mdz_ansi instead. It is much more speedy.
Capacity - how many bytes of memory is reserved.
Size - how many bytes are actually used in a string, excluding terminating 0.
Length - actual length of string in UTF-8 symbols, excluding terminating 0.
"reserve/AndReserve" functions allocate/reallocate memory dynamically using malloc() /realloc() . "attach" functionality allows attaching contiguous block of memory to string, for using string functions on it.
Unicode "combining characters" are not specially-distinguished and counted as a distinct symbols.
See additional info on mdz_unicode library like version, portability, etc in mdz_unicode .h
Init and destroy functions:mdz_utf8_create mdz_utf8_create_attached mdz_utf8_destroy mdz_utf8_clear mdz_utf8_attachDataReserve capacity functions:mdz_utf8_reserve mdz_utf8_capacity mdz_utf8_size mdz_utf8_length mdz_utf8_offsetFromStart mdz_utf8_isAttachedData mdz_utf8_embedSizeInsert/remove functions:mdz_utf8_insertUtf8_async mdz_utf8_insertUtf8_string_async mdz_utf8_insertAnsi_async mdz_utf8_insertAnsi_string_async mdz_utf8_insertWchar_async mdz_utf8_insertWchar_string_async mdz_utf8_insertUtf16_async mdz_utf8_insertUtf16_string_async mdz_utf8_insertUtf32_async mdz_utf8_insertUtf32_string_async Create empty UTF-8 string with Capacity == 1 (for 0-terminator), Size == 0 and Length == 0.struct mdz_Utf8* mdz_utf8_create(size_t nEmbedSize); Parameter | Description |
---|
nEmbedSize | size of "embedded part" of string. There is no "embedded part" if 0 |
Return | Description |
---|
NULL | if library is not initialized with mdz_unicode_init() call | NULL | if memory allocation failed | Result | pointer to string for use in other mdz_utf8 functions | mdz_utf8 Reference Create empty UTF-8 string with Capacity == 1 (for 0-terminator), Size == 0 and Length == 0. Memory for utf8 structure starts at position pStart . Size of internal utf8 structure (it is usually bigger than mdz_Utf8 !) is returned in pSize.struct mdz_Utf8* mdz_utf8_create_attached(const void* pStart, size_t nAreaSizeBytes, size_t* pOutSize); Parameter | Description |
---|
pStart | memory start position of utf8 structure | nAreaSizeBytes | size of available memory from pStart in bytes. Should be large enough for internal utf8 structure | pOutSize | returned actual size of placed internal utf8 structure in bytes, may be NULL if not needed |
Return | Description |
---|
NULL | if library is not initialized with mdz_unicode_init() call | NULL | if pStart == NULL or pSize == NULL | NULL | if size in nSize is smaller than size of internal utf8 structure | Result | pointer to string for use in other mdz_utf8 functions. Normally it equals to pStart | mdz_utf8 Reference Destroy UTF-8 string including underlying data. After destroying, pointer to string is set to NULL . If utf8 is attached using mdz_utf8_createAttached(), free() will not be called. If utf8 data is attached using mdz_utf8_attachData() , m_pData will not be destroyed.void mdz_utf8_destroy(struct mdz_Utf8** ppUtf8); Parameter | Description |
---|
ppUtf8 | pointer to pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | mdz_utf8 Reference Clear m_pData of UTF-8 string with setting Size in 0.void mdz_utf8_clear(struct mdz_Utf8* pUtf8); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | mdz_utf8 Reference Attach pre-allocated data to UTF-8 string, assigning pData to m_pData . If attached, m_pData will not be destroyed in mdz_utf8_destroy() mdz_bool mdz_utf8_attachData(struct mdz_Utf8* pUtf8, unsigned char* pData, size_t nOffsetFromStart, size_t nCapacity, enum mdz_attach_type enAttachType); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | pData | pointer to pre-allocated data to attach | nOffsetFromStart | position in pre-allocated data to attach from. Can be > 0 | nCapacity | full capacity pre-allocated data in items | enAttachType | type of attachment. 0 is expected at position pData [nOffsetFromStart ] if MDZ_ATTACH_ZEROSIZE . 0 is expected at position pData [nCapacity ] if MDZ_ATTACH_SIZE_TERMINATOR . MDZ_ATTACH_SIZE_NO_TERMINATOR is not allowed |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if pData == NULL (MDZ_ERROR_DATA), or nOffsetFromStart >= nCapacity (MDZ_ERROR_OFFSET), or invalid enAttachType (MDZ_ERROR_ATTACHTYPE) | mdz_false | if enAttachType is MDZ_ATTACH_ZEROSIZE or MDZ_ATTACH_SIZE_TERMINATOR but 0 is not found at expected position (MDZ_ERROR_ATTACH_TERMINATOR) | mdz_false | if enAttachType == MDZ_ATTACH_SIZE_TERMINATOR and pData contains invalid UTF-8 characters (MDZ_ERROR_CONTENT) | mdz_true | operation succeeded | mdz_utf8 Reference Reserve nNewCapacity bytes for UTF-8 string. String Size and Length do not change.mdz_bool mdz_utf8_reserve(struct mdz_Utf8* pUtf8, size_t nNewCapacity); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nNewCapacity | new capacity in bytes to reserve |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_true | reservation succeeded, or nNewCapacity <= Capacity (MDZ_ERROR_CAPACITY) | mdz_utf8 Reference Return string Capacity in bytes.size_t mdz_utf8_capacity(const struct mdz_Utf8* pUtf8); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() |
Return | Description |
---|
SIZE_MAX | if pUtf8 == NULL | Capacity | otherwise | mdz_utf8 Reference Return string Size in bytes.size_t mdz_utf8_size(const struct mdz_Utf8* pUtf8); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf8 == NULL | Size | otherwise | mdz_utf8 Reference Return string Length in symbols.size_t mdz_utf8_length(const struct mdz_Utf8* pUtf8); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf8 == NULL | Length | otherwise | mdz_utf8 Reference Return string OffsetFromStart in bytes.size_t mdz_utf8_offsetFromStart(const struct mdz_Utf8* pUtf8); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf8 == NULL | OffsetFromStart | otherwise | mdz_utf8 Reference Return if string data is attached.mdz_bool mdz_utf8_isAttachedData(const struct mdz_Utf8* pUtf8); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if string data is not attached | mdz_true | if string data is attached | mdz_utf8 Reference Return string "embedded part" Size in bytes.size_t mdz_utf8_embedSize(const struct mdz_Utf8* pUtf8); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf8 == NULL | Result | "embedded part" Size otherwise | mdz_utf8 Reference Insert nCount UTF-8 bytes in string. Size grows on nCount . Length grows on symbols count. String reserved area and pcItems should not overlap.mdz_bool mdz_utf8_insertUtf8_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const unsigned char* pcItems, size_t nCount, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertUtf8(pUtf8, nLeftPos, pcItems, nCount, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pcItems | UTF-8 bytes to insert | nCount | number of UTF-8 bytes to insert or 0 if pcItems until 0-terminator should be used | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pcItems contain invalid UTF-8 byte(s) (MDZ_ERROR_CONTENT) | mdz_false | if string reserved area and pcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert UTF-8 string pUtf8Source in string. Size grows on nCount. Length grows on symbols count. String reserved area and pUtf8Source ->m_pData should not overlap. This function performs significantly better than mdz_utf8_insertUtf8_async() - because there is no additional validation of inserted string.mdz_bool mdz_utf8_insertUtf8_string_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const struct mdz_Utf8* pUtf8Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertUtf8_string(pUtf8, nLeftPos, pUtf8Source, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf8Source | pointer to UTF-8 string to insert. String is returned by mdz_utf8_create() or mdz_utf8_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf8Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf8Source == NULL (MDZ_ERROR_SOURCE), or pUtf8Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert nCount ASCII/ANSI bytes in string. Characters are converted to UTF-8 characters before isertion. Size grows on added bytes. Length grows on added symbols count. String reserved area and pcItems should not overlap.mdz_bool mdz_utf8_insertAnsi_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const unsigned char* pcItems, size_t nCount, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertAnsi(pUtf8, nLeftPos, pcItems, nCount, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pcItems | bytes to insert | nCount | number of bytes to insert or 0 if pcItems until 0-terminator should be used | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert ASCII/ANSI string pAnsiSource in string. Characters are converted to UTF-8 characters before isertion. Size grows on added bytes. Length grows on added symbols count. String reserved area and pAnsiSource ->m_pData should not overlap.mdz_bool mdz_utf8_insertAnsi_string_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const void* pAnsiSource, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertAnsi_string(pUtf8, nLeftPos, pAnsiSource, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pAnsiSource | pointer to ASCII/ANSI string to insert. String is returned by mdz_ansi_create() or mdz_ansi_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pAnsiSource ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pAnsiSource == NULL (MDZ_ERROR_SOURCE), or pAnsiSource .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert nCount "wide"-characters in string. Characters are converted to UTF-8 characters before isertion. Size grows on added bytes. Length grows on symbols count. String reserved area and pwcItems should not overlap.mdz_bool mdz_utf8_insertWchar_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const wchar_t* pwcItems, size_t nCount, size_t nWcharSize, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertWchar(pUtf8, nLeftPos, pwcItems, nCount, nWcharSize, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pwcItems | "wide"-characters to insert | nCount | number of "wide"-characters to insert or 0 if characters until 0-terminator should be used | nWcharSize | size of pwcItems wchar_t character in bytes | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if nWcharSize is not 2 or 4 (MDZ_ERROR_WCHAR_SIZE) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pwcItems contain invalid "wide"-character(s) (MDZ_ERROR_CONTENT) | mdz_false | if string reserved area and pwcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pwcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert "wide"-characters string pWcharSource in string. Characters are converted to UTF-8 characters before isertion. Size grows on added bytes. Length grows on symbols count. String reserved area and pWcharSource ->m_pData should not overlap. For 2-bytes "wide"-characters - see information concerning Unicode "surrogate pairs"/"combining characters" in description of mdz_utf8_insertUtf16_async() . For 4-bytes "wide"-characters - see information concerning Unicode "combining characters" in description of mdz_utf8_insertUtf32_async() .mdz_bool mdz_utf8_insertWchar_string_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const void* pWcharSource, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertWchar_string(pUtf8, nLeftPos, pWcharSource, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pWcharSource | pointer to "wide"-characters string to insert. String is returned by mdz_wchar_create() or mdz_wchar_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pWcharSource ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pWcharSource == NULL (MDZ_ERROR_SOURCE), or pWcharSource .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert nCount UTF-16 characters in string. UTF-16 characters are converted to UTF-8 before isertion. Size grows on added bytes. Length grows on symbols count. String reserved area and pItems should not overlap.
UTF-16 "surrogate pairs" are supported and counted as 1 symbol (4 bytes size).
UTF-16 "combining characters" are not specially-distinguished and counted as a separate UTF-8 symbol.mdz_bool mdz_utf8_insertUtf16_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const uint16_t* pItems, size_t nCount, enum mdz_endianness enEndianness, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertUtf16(pUtf8, nLeftPos, pItems, nCount, enEndianness, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pItems | UTF-16 characters to insert | nCount | number of UTF-16 characters to insert or 0 if pcItems until 0-terminator should be used | enEndianness | endianness of UTF-16 characters in pItems . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pItems contain invalid UTF-16 character(s) (MDZ_ERROR_CONTENT), or invalid enEndianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if string reserved area and pItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert UTF-16 string pUtf16Source in string. UTF-16 characters are converted to UTF-8 before isertion. Size grows on added bytes. Length grows on symbols count. String reserved area and pUtf16Source ->m_pData should not overlap.
UTF-16 "surrogate pairs" are supported and counted as 1 symbol (4 bytes size).
UTF-16 "combining characters" are not specially-distinguished and counted as a separate UTF-8 symbol.mdz_bool mdz_utf8_insertUtf16_string_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const void* pUtf16Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertUtf16_string(pUtf8, nLeftPos, pUtf16Source, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf16Source | pointer to UTF16 string to insert. String is returned by mdz_utf16_create() or mdz_utf16_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf16Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf16Source == NULL (MDZ_ERROR_SOURCE), or pUtf16Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert nCount UTF-32 characters in string. UTF-32 characters are converted to UTF-8 before isertion. Size grows on added bytes. Length grows on symbols count. String reserved area and pItems should not overlap. Unicode "combining characters" are not specially-distinguished and counted as a separate UTF-8 symbol.mdz_bool mdz_utf8_insertUtf32_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const uint32_t* pItems, size_t nCount, enum mdz_endianness enEndianness, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertUtf32(pUtf8, nLeftPos, pItems, nCount, enEndianness, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pItems | UTF-32 characters to insert | nCount | number of UTF-32 characters to insert or 0 if pcItems until 0-terminator should be used | enEndianness | endianness of UTF-32 characters in pItems . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference Insert UTF-32 string pUtf32Source in string. UTF-32 characters are converted to UTF-8 before isertion. Size grows on added bytes. Length grows on symbols count. String reserved area and pUtf32Source ->m_pData should not overlap. Unicode "combining characters" are not specially-distinguished and counted as a separate UTF-8 symbol.mdz_bool mdz_utf8_insertUtf32_string_async(struct mdz_Utf8* pUtf8, size_t nLeftPos, const void* pUtf32Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf8_insertUtf32_string(pUtf8, nLeftPos, pUtf32Source, bReserve); Parameter | Description |
---|
pUtf8 | pointer to string returned by mdz_utf8_create() or mdz_utf8_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf32Source | pointer to UTF-32 string to insert. String is returned by mdz_utf32_create() or mdz_utf32_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf8 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf8_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf32Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf32Source == NULL (MDZ_ERROR_SOURCE), or pUtf32Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf8 Reference
mdz_utf16 is dynamically-sized contiguous string, containing UTF-16 characters.
Capacity - how many UTF-16 characters memory is reserved for.
Size - how many UTF-16 characters are actually used in a string, excluding terminating 0.
Length - actual length of string in symbols, excluding terminating 0. "surrogate pairs" count as 1 symbol.
"reserve/AndReserve" functions allocate/reallocate memory dynamically using malloc() /realloc() . "attach" functionality allows attaching contiguous block of memory to string, for using string functions on it.
UTF-16 "surrogate pairs" are supported and checked Unicode "combining characters" are not specially-distinguished and counted as distinct symbols Endianness of bytes in UTF-16 character - is defined by m_enEndianness and set using enEndianness during string-creation in mdz_utf16_create()
Init and destroy functions:mdz_utf16_create mdz_utf16_create_attached mdz_utf16_destroy mdz_utf16_clear mdz_utf16_attachDataReserve capacity functions:mdz_utf16_reserve mdz_utf16_capacity mdz_utf16_size mdz_utf16_length mdz_utf16_endianness mdz_utf16_offsetFromStart mdz_utf16_isAttachedData mdz_utf16_embedSizeInsert/remove functions:mdz_utf16_insertUtf16_async mdz_utf16_insertUtf16_string_async mdz_utf16_insertAnsi_async mdz_utf16_insertAnsi_string_async mdz_utf16_insertWchar_async mdz_utf16_insertWchar_string_async mdz_utf16_insertUtf8_async mdz_utf16_insertUtf8_string_async mdz_utf16_insertUtf32_async mdz_utf16_insertUtf32_string_async Create empty UTF-16 string with Capacity == 1 (for 0-terminator), Size == 0 and Length == 0.struct mdz_Utf16* mdz_utf16_create(size_t nEmbedSize, enum mdz_endianness enEndianness); Parameter | Description |
---|
nEmbedSize | size of "embedded part" of string. There is no "embedded part" if 0 | enEndianness | endianness of string. Should be MDZ_ENDIAN_LITTLE or MDZ_ENDIAN_BIG
|
Return | Description |
---|
NULL | if library is not initialized with mdz_unicode_init() call | NULL | if memory allocation failed | NULL | if invalid enEndianness
| Result | pointer to string for use in other mdz_utf16 functions | mdz_utf16 Reference Create empty UTF-16 string with Capacity == 1 (for 0-terminator), Size == 0 and Length == 0. Memory for utf16 structure starts at position pStart . Size of internal utf16 structure (it is usually bigger than mdz_Utf16 !) is returned in pSize.struct mdz_Utf16* mdz_utf16_create_attached(const void* pStart, enum mdz_endianness enEndianness, size_t nAreaSizeBytes, size_t* pOutSize); Parameter | Description |
---|
pStart | memory start position of utf16 structure | enEndianness | endianness of string. Should be MDZ_ENDIAN_LITTLE or MDZ_ENDIAN_BIG
| nAreaSizeBytes | size of available memory from pStart in bytes. Should be large enough for internal utf16 structure | pOutSize | returned actual size of allocated internal utf16 structure in bytes, may be NULL if not needed |
Return | Description |
---|
NULL | if library is not initialized with mdz_unicode_init() call | NULL | if invalid enEndianness
| NULL | if pStart == NULL or pSize == NULL | NULL | if size in nSize is smaller than size of internal utf16 structure | Result | pointer to string for use in other mdz_utf16 functions. Normally it equals to pStart | mdz_utf16 Reference Destroy UTF-16 string including underlying data. After destroying, pointer to string is set to NULL . If utf16 is attached using mdz_utf16_createAttached(), free() will not be called. If utf16 data is attached using mdz_utf16_attachData() , m_pData will not be destroyed.void mdz_utf16_destroy(struct mdz_Utf16** ppUtf16); Parameter | Description |
---|
ppUtf16 | pointer to pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | mdz_utf16 Reference Clear m_pData of UTF-16 string with setting Size in 0.void mdz_utf16_clear(struct mdz_Utf16* pUtf16); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() | mdz_utf16 Reference Attach pre-allocated data to UTF-16 string, assigning pData to m_pData . If attached, m_pData will not be destroyed in mdz_utf16_destroy() mdz_bool mdz_utf16_attachData(struct mdz_Utf16* pUtf16, uint16_t* pData, size_t nOffsetFromStart, size_t nCapacity, enum mdz_attach_type enAttachType, enum mdz_endianness enEndianness); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | pData | pointer to pre-allocated data to attach | nOffsetFromStart | position in pre-allocated data to attach from. Can be > 0 | nCapacity | full capacity pre-allocated data in items | enAttachType | type of attachment. 0 is expected at position pData [nOffsetFromStart ] if MDZ_ATTACH_ZEROSIZE . 0 is expected at position pData [nCapacity ] if MDZ_ATTACH_SIZE_TERMINATOR . MDZ_ATTACH_SIZE_NO_TERMINATOR is not allowed | enEndianness | endianness of UTF-16 characters in pData . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" |
Return | Description |
---|
mdz_false | if pUtf16 == NULL | mdz_false | if pData == NULL (MDZ_ERROR_DATA), or nOffsetFromStart >= nCapacity (MDZ_ERROR_OFFSET), or invalid enAttachType (MDZ_ERROR_ATTACHTYPE), or invalid pData endianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if enAttachType is MDZ_ATTACH_ZEROSIZE or MDZ_ATTACH_SIZE_TERMINATOR but 0 is not found at expected position (MDZ_ERROR_ATTACH_TERMINATOR) | mdz_false | if enAttachType == MDZ_ATTACH_SIZE_TERMINATOR and pData contains invalid UTF-16 characters (MDZ_ERROR_CONTENT) | mdz_true | operation succeeded | mdz_utf16 Reference Reserve nNewCapacity bytes for UTF-16 string. Size and Length do not change.mdz_bool mdz_utf16_reserve(struct mdz_Utf16* pUtf16, size_t nNewCapacity); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nNewCapacity | new capacity in UTF-16 characters to reserve |
Return | Description |
---|
mdz_false | if pUtf16 == NULL | mdz_false | if memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_true | reservation succeeded, or nNewCapacity <= Capacity (MDZ_ERROR_CAPACITY) | mdz_utf16 Reference Return string Capacity in UTF-16 characters.size_t mdz_utf16_capacity(const struct mdz_Utf16* pUtf16); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf16 == NULL | Capacity | otherwise | mdz_utf16 Reference Return string Size in UTF-16 characters.size_t mdz_utf16_size(const struct mdz_Utf16* pUtf16); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf16 == NULL | Size | otherwise | mdz_utf16 Reference Return string Length in symbols.size_t mdz_utf16_length(const struct mdz_Utf16* pUtf16); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf16 == NULL | Length | otherwise | mdz_utf16 Reference Return string endianness.enum mdz_endianness mdz_utf16_endianness(const struct mdz_Utf16* pUtf16); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() |
Return | Description |
---|
MDZ_ENDIAN_ERROR | if pUtf16 == NULL | Endianness | otherwise | mdz_utf16 Reference Return string OffsetFromStart in UTF-16 characters.size_t mdz_utf16_offsetFromStart(const struct mdz_Utf16* pUtf16); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf16 == NULL | OffsetFromStart | otherwise | mdz_utf16 Reference Return if string data is attached.mdz_bool mdz_utf16_isAttachedData(const struct mdz_Utf16* pUtf16); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() |
Return | Description |
---|
mdz_false | if pUtf16 == NULL | mdz_false | if string data is not attached | mdz_true | if string data is attached | mdz_utf16 Reference Return string "embedded part" Size in UTF-16 characters.size_t mdz_utf16_embedSize(const struct mdz_Utf16* pUtf16); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf16 == NULL | Result | "embedded part" Size otherwise | mdz_utf16 Reference Insert nCount UTF-16 characters in string. Size grows on nCount . Length grows on symbols count. String reserved area and pItems should not overlap.mdz_bool mdz_utf16_insertUtf16_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const uint16_t* pItems, size_t nCount, enum mdz_endianness enEndianness, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertUtf16(pUtf16, nLeftPos, pItems, nCount, enEndianness, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pItems | UTF-16 characters to insert | nCount | number of UTF-16 characters to insert or 0 if pcItems until 0-terminator should be used | enEndianness | endianness of UTF-16 characters in pItems . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pItems contain invalid UTF-16 character(s) (MDZ_ERROR_CONTENT), or invalid enEndianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if string reserved area and pItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert UTF-16 string pUtf16Source in string. Size grows on nCount. Length grows on symbols count. String reserved area and pUtf16Source ->m_pData should not overlap. This function performs significantly better than mdz_utf16_insertUtf16_async() - because there is no additional validation of inserted string.mdz_bool mdz_utf16_insertUtf16_string_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const struct mdz_Utf16* pUtf16Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertUtf16_string(pUtf16, nLeftPos, pUtf16Source, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf16Source | pointer to UTF-16 string to insert. String is returned by mdz_utf16_create() or mdz_utf16_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf16Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf16Source == NULL (MDZ_ERROR_SOURCE), or pUtf16Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert nCount ASCII/ANSI bytes in string. Characters are converted to UTF-16 characters before isertion. Size grows on added UTF-16 characters count. Length grows on added symbols count. String reserved area and pcItems should not overlap.mdz_bool mdz_utf16_insertAnsi_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const unsigned char* pcItems, size_t nCount, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertAnsi(pUtf16, nLeftPos, pcItems, nCount, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pcItems | bytes to insert | nCount | number of bytes to insert or 0 if pcItems until 0-terminator should be used | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert ASCII/ANSI string pAnsiSource in string. Characters are converted to UTF-16 characters before isertion. Size grows on added UTF-16 characters count. Length grows on added symbols count. String reserved area and pAnsiSource ->m_pData should not overlap.mdz_bool mdz_utf16_insertAnsi_string_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const void* pAnsiSource, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertAnsi_string(pUtf16, nLeftPos, pAnsiSource, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pAnsiSource | pointer to ASCII/ANSI string to insert. String is returned by mdz_ansi_create() or mdz_ansi_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pAnsiSource ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pAnsiSource == NULL (MDZ_ERROR_SOURCE), or pAnsiSource .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert nCount "wide"-characters in string. Characters are converted to UTF-16 characters before isertion. Size grows on added UTF-16 characters count. Length grows on added symbols count. String reserved area and pwcItems should not overlap.mdz_bool mdz_utf16_insertWchar_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const wchar_t* pwcItems, size_t nCount, size_t nWcharSize, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertWchar(pUtf16, nLeftPos, pwcItems, nCount, nWcharSize, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pwcItems | "wide"-characters to insert | nCount | number of "wide"-characters to insert or 0 if pcItems until 0-terminator should be used | nWcharSize | size of pwcItems wchar_t character in bytes | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if nWcharSize is not 2 or 4 (MDZ_ERROR_WCHAR_SIZE) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pwcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert "wide"-characters string pWcharSource in string. Characters are converted to UTF-16 characters before isertion. Size grows on added UTF-16 characters count. Length grows on added symbols count. String reserved area and pWcharSource ->m_pData should not overlap. This function performs significantly better than mdz_utf16_insertWchar_async() - because there is no additional validation of inserted string.mdz_bool mdz_utf16_insertWchar_string_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const void* pWcharSource, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertWchar_string(pUtf16, nLeftPos, pWcharSource, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pWcharSource | pointer to "wide"-characters string to insert. String is returned by mdz_wchar_create() or mdz_wchar_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pWcharSource ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pWcharSource == NULL (MDZ_ERROR_SOURCE), or pWcharSource .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert nCount UTF-8 bytes in string. UTF-8 bytes are converted to UTF-16 characters before isertion. Size grows on added UTF-16 characters count. Length grows on added symbols count. String reserved area and pcItems should not overlap.mdz_bool mdz_utf16_insertUtf8_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const unsigned char* pcItems, size_t nCount, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertUtf8(pUtf16, nLeftPos, pcItems, nCount, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pcItems | UTF-8 characters to insert | nCount | number of UTF-8 characters to insert in bytes or 0 if pcItems until 0-terminator should be used | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pcItems contain invalid UTF-8 byte(s) (MDZ_ERROR_CONTENT) | mdz_false | if string reserved area and pcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert UTF-8 string pUtf8Source in string. UTF-8 bytes are converted to UTF-16 characters before isertion. Size grows on added UTF-16 characters count. Length grows on added symbols count. String reserved area and pUtf8Source ->m_pData should not overlap.mdz_bool mdz_utf16_insertUtf8_string_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const void* pUtf8Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertUtf8_string(pUtf16, nLeftPos, pUtf8Source, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf8Source | pointer to UTF-8 string to insert. String is returned by mdz_utf8_create() or mdz_utf8_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf8Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf8Source == NULL (MDZ_ERROR_SOURCE), or pUtf8Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert nCount UTF-32 characters in string. UTF-32 characters are converted to UTF-16 characters before isertion. Size grows on added UTF-16 characters count. Length grows on added symbols count. String reserved area and pItems should not overlap.mdz_bool mdz_utf16_insertUtf32_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const uint32_t* pItems, size_t nCount, enum mdz_endianness enEndianness, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertUtf32(pUtf16, nLeftPos, pItems, nCount, enEndianness, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pItems | UTF-32 characters to insert | nCount | number of UTF-32 characters to insert or 0 if pcItems until 0-terminator should be used | enEndianness | endianness of UTF-32 characters in pItems . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pItems contain invalid UTF-8 character(s) (MDZ_ERROR_CONTENT), or invalid enEndianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if string reserved area and pItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference Insert UTF-32 string pUtf32Source in string. UTF-32 characters are converted to UTF-16 characters before isertion. Size grows on added UTF-16 characters count. Length grows on added symbols count. String reserved area and pUtf32Source ->m_pData should not overlap.mdz_bool mdz_utf16_insertUtf32_string_async(struct mdz_Utf16* pUtf16, size_t nLeftPos, const void* pUtf32Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf16_insertUtf32_string(pUtf16, nLeftPos, pUtf32Source, bReserve); Parameter | Description |
---|
pUtf16 | pointer to string returned by mdz_utf16_create() or mdz_utf16_create_attached() | nLeftPos | 0-based position to insert in symbols. "surrogate pairs" count as 1 symbol. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf32Source | pointer to UTF-32 string to insert. String is returned by mdz_utf32_create() or mdz_utf32_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf16 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf16_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf32Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf32Source == NULL (MDZ_ERROR_SOURCE), or pUtf32Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf16 Reference
mdz_utf32 is dynamically-sized contiguous string, containing UTF-32 characters.
Capacity - how many UTF-32 characters memory is reserved for.
Size - how many UTF-32 characters are actually used in a string, excluding terminating 0.
Length - actual length of string in symbols, excluding terminating 0.
"reserve/AndReserve" functions allocate/reallocate memory dynamically using malloc() /realloc() . "attach" functionality allows attaching contiguous block of memory to string, for using string functions on it.
Unicode "combining characters" are not specially-distinguished and counted as distinct symbols Endianness of bytes in UTF-32 character - is defined by m_enEndianness and set using enEndianness during string-creation in mdz_utf32_create()
Init and destroy functions:mdz_utf32_create mdz_utf32_create_attached mdz_utf32_destroy mdz_utf32_clear mdz_utf32_attachDataReserve capacity functions:mdz_utf32_reserve mdz_utf32_capacity mdz_utf32_size mdz_utf32_length mdz_utf32_endianness mdz_utf32_offsetFromStart mdz_utf32_isAttachedData mdz_utf32_embedSizeInsert/remove functions:mdz_utf32_insertUtf32_async mdz_utf32_insertUtf32_string_async mdz_utf32_insertAnsi_async mdz_utf32_insertAnsi_string_async mdz_utf32_insertWchar_async mdz_utf32_insertWchar_string_async mdz_utf32_insertUtf8_async mdz_utf32_insertUtf8_string_async mdz_utf32_insertUtf16_async mdz_utf32_insertUtf16_string_async Create empty UTF-32 string with Capacity == 1 (for 0-terminator), Size == 0 and Length == 0.struct mdz_Utf32* mdz_utf32_create(size_t nEmbedSize, enum mdz_endianness enEndianness); Parameter | Description |
---|
nEmbedSize | size of "embedded part" of string. There is no "embedded part" if 0 | enEndianness | endianness of string. Should be MDZ_ENDIAN_LITTLE or MDZ_ENDIAN_BIG
|
Return | Description |
---|
NULL | if library is not initialized with mdz_unicode_init() call | NULL | if memory allocation failed | NULL | if invalid enEndianness
| Result | pointer to string for use in other mdz_utf32 functions | mdz_utf32 Reference Create empty UTF-32 string with Capacity == 1 (for 0-terminator), Size == 0 and Length == 0. Memory for utf32 structure starts at position pStart . Size of internal utf32 structure (it is usually bigger than mdz_Utf32 !) is returned in pSize.struct mdz_Utf32* mdz_utf32_create_attached(const void* pStart, enum mdz_endianness enEndianness, size_t nAreaSizeBytes, size_t* pOutSize); Parameter | Description |
---|
pStart | memory start position of utf32 structure | enEndianness | endianness of string. Should be MDZ_ENDIAN_LITTLE or MDZ_ENDIAN_BIG
| nAreaSizeBytes | size of available memory from pStart in bytes. Should be large enough for internal utf32 structure | pOutSize | returned actual size of allocated internal utf32 structure in bytes, may be NULL if not needed |
Return | Description |
---|
NULL | if library is not initialized with mdz_unicode_init() call | NULL | if invalid enEndianness
| NULL | if pStart == NULL or pSize == NULL | NULL | if size in nSize is smaller than size of internal utf32 structure | Result | pointer to string for use in other mdz_utf32 functions. Normally it equals to pStart | mdz_utf32 Reference Destroy UTF-32 string including underlying data. After destroying, pointer to string is set to NULL . If utf32 is attached using mdz_utf32_createAttached(), free() will not be called. If utf32 data is attached using mdz_utf32_attachData() , m_pData will not be destroyed.void mdz_utf32_destroy(struct mdz_Utf32** ppUtf32); Parameter | Description |
---|
ppUtf32 | pointer to pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | mdz_utf32 Reference Clear m_pData of UTF-32 string with setting Size in 0.void mdz_utf32_clear(struct mdz_Utf32* pUtf32); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() | mdz_utf32 Reference Attach pre-allocated data to UTF-32 string, assigning pData to m_pData . If attached, m_pData will not be destroyed in mdz_utf32_destroy() mdz_bool mdz_utf32_attachData(struct mdz_Utf32* pUtf32, uint32_t* pData, size_t nOffsetFromStart, size_t nCapacity, enum mdz_attach_type enAttachType, enum mdz_endianness enEndianness); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | pData | pointer to pre-allocated data to attach | nOffsetFromStart | position in pre-allocated data to attach from. Can be > 0 | nCapacity | full capacity pre-allocated data in items | enAttachType | type of attachment. 0 is expected at position pData [nOffsetFromStart ] if MDZ_ATTACH_ZEROSIZE . 0 is expected at position pData [nCapacity ] if MDZ_ATTACH_SIZE_TERMINATOR . MDZ_ATTACH_SIZE_NO_TERMINATOR is not allowed | enEndianness | endianness of UTF-32 characters in pData . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" |
Return | Description |
---|
mdz_false | if pUtf32 == NULL | mdz_false | if pData == NULL (MDZ_ERROR_DATA), or nOffsetFromStart >= nCapacity (MDZ_ERROR_OFFSET), or invalid enAttachType (MDZ_ERROR_ATTACHTYPE), or invalid pData endianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if enAttachType is MDZ_ATTACH_ZEROSIZE or MDZ_ATTACH_SIZE_TERMINATOR but 0 is not found at expected position (MDZ_ERROR_ATTACH_TERMINATOR) | mdz_true | operation succeeded | mdz_utf32 Reference Reserve nNewCapacity bytes for UTF-32 string. Size and Length do not change.mdz_bool mdz_utf32_reserve(struct mdz_Utf32* pUtf32, size_t nNewCapacity); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nNewCapacity | new capacity in UTF-32 characters to reserve |
Return | Description |
---|
mdz_false | if pUtf32 == NULL | mdz_false | if memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_true | reservation succeeded, or nNewCapacity <= Capacity (MDZ_ERROR_CAPACITY) | mdz_utf32 Reference Return string Capacity in UTF-32 characters.size_t mdz_utf32_capacity(const struct mdz_Utf32* pUtf32); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf32 == NULL | Capacity | otherwise | mdz_utf32 Reference Return string Size in UTF-32 characters.size_t mdz_utf32_size(const struct mdz_Utf32* pUtf32); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf32 == NULL | Size | otherwise | mdz_utf32 Reference Return string length in symbols.size_t mdz_utf32_length(const struct mdz_Utf32* pUtf32); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf32 == NULL | Size | otherwise | mdz_utf32 Reference Return string endianness.enum mdz_endianness mdz_utf32_endianness(const struct mdz_Utf32* pUtf32); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() |
Return | Description |
---|
MDZ_ENDIAN_ERROR | if pUtf32 == NULL | Endianness | otherwise | mdz_utf32 Reference Return string OffsetFromStart in UTF-32 characters.size_t mdz_utf32_offsetFromStart(const struct mdz_Utf32* pUtf32); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf32 == NULL | OffsetFromStart | otherwise | mdz_utf32 Reference Return if string data is attached.mdz_bool mdz_utf32_isAttachedData(const struct mdz_Utf32* pUtf32); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() |
Return | Description |
---|
mdz_false | if pUtf32 == NULL | mdz_false | if string data is not attached | mdz_true | if string data is attached | mdz_utf32 Reference Return string "embedded part" Size in UTF-32 characters.size_t mdz_utf32_embedSize(const struct mdz_Utf32* pUtf32); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() |
Return | Description |
---|
SIZE_MAX | if pUtf32 == NULL | Result | "embedded part" Size otherwise | mdz_utf32 Reference Insert nCount UTF-32 characters in string. Size grows on nCount . Length grows on symbols count. String reserved area and pItems should not overlap.mdz_bool mdz_utf32_insertUtf32_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const uint32_t* pItems, size_t nCount, enum mdz_endianness enEndianness, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertUtf32(pUtf32, nLeftPos, pItems, nCount, enEndianness, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pItems | UTF-32 characters to insert | nCount | number of UTF-32 characters to insert or 0 if pcItems until 0-terminator should be used | enEndianness | endianness of UTF-32 characters in pItems . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert UTF-32 string pUtf32Source in string. Size grows on nCount. Length grows on symbols count. String reserved area and pUtf32Source ->m_pData should not overlap. This function performs significantly better than mdz_utf32_insertUtf32_async() - because there is no additional validation of inserted string.mdz_bool mdz_utf32_insertUtf32_string_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const struct mdz_Utf32* pUtf32Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertUtf32_string(pUtf32, nLeftPos, pUtf32Source, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf32Source | pointer to UTF-32 string to insert. String is returned by mdz_utf32_create() or mdz_utf32_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if invalid enEndianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if string reserved area and pUtf32Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf32Source == NULL (MDZ_ERROR_SOURCE), or pUtf32Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert nCount ASCII/ANSI bytes in string. Characters are converted to UTF-32 characters before isertion. Size grows on added UTF-32 characters count. Length grows on added symbols count. String reserved area and pcItems should not overlap.mdz_bool mdz_utf32_insertAnsi_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const unsigned char* pcItems, size_t nCount, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertAnsi(pUtf32, nLeftPos, pcItems, nCount, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pcItems | bytes to insert | nCount | number of bytes to insert or 0 if pcItems until 0-terminator should be used | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert ASCII/ANSI string pAnsiSource in string. Characters are converted to UTF-32 characters before isertion. Size grows on added UTF-32 characters count. Length grows on added symbols count. String reserved area and pAnsiSource ->m_pData should not overlap.mdz_bool mdz_utf32_insertAnsi_string_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const void* pAnsiSource, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertAnsi_string(pUtf32, nLeftPos, pAnsiSource, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pAnsiSource | pointer to ASCII/ANSI string to insert. String is returned by mdz_ansi_create() or mdz_ansi_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pAnsiSource ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pAnsiSource == NULL (MDZ_ERROR_SOURCE), or pAnsiSource .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert nCount "wide"-characters in string. Characters are converted to UTF-32 characters before isertion. Size grows on added UTF-32 characters count. Length grows on added symbols count. String reserved area and pwcItems should not overlap.mdz_bool mdz_utf32_insertWchar_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const wchar_t* pwcItems, size_t nCount, size_t nWcharSize, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertWchar(pUtf32, nLeftPos, pwcItems, nCount, nWcharSize, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pwcItems | "wide"-characters to insert | nCount | number of characters to insert in bytes or 0 if pcItems until 0-terminator should be used | nWcharSize | size of pwcItems wchar_t character in bytes | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if nWcharSize is not 2 or 4 (MDZ_ERROR_WCHAR_SIZE) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pwcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert "wide"-characters string pWcharSource in string. Characters are converted to UTF-32 characters before isertion. Size grows on added UTF-32 characters count. Length grows on added symbols count. String reserved area and pWcharSource ->m_pData should not overlap.mdz_bool mdz_utf32_insertWchar_string_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const void* pWcharSource, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertWchar_string(pUtf32, nLeftPos, pWcharSource, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pWcharSource | pointer to "wide"-characters string to insert. String is returned by mdz_wchar_create() or mdz_wchar_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pWcharSource ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pWcharSource == NULL (MDZ_ERROR_SOURCE), or pWcharSource .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert nCount UTF-8 characters in string. UTF-8 characters are converted to UTF-32 characters before isertion. Size grows on added UTF-32 characters count. Length grows on added symbols count. String reserved area and pcItems should not overlap.mdz_bool mdz_utf32_insertUtf8_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const unsigned char* pcItems, size_t nCount, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertUtf8(pUtf32, nLeftPos, pcItems, nCount, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pcItems | UTF-8 characters to insert | nCount | number of UTF-8 characters to insert in bytes or 0 if pcItems until 0-terminator should be used | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pcItems contain invalid UTF-8 character(s) (MDZ_ERROR_CONTENT) | mdz_false | if string reserved area and pcItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pcItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert UTF-8 string pUtf8Source in string. UTF-8 characters are converted to UTF-32 characters before isertion. Size grows on added UTF-32 characters count. Length grows on added symbols count. String reserved area and pUtf8Source ->m_pData should not overlap.mdz_bool mdz_utf32_insertUtf8_string_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const void* pUtf8Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertUtf8_string(pUtf32, nLeftPos, pUtf8Source, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf8Source | pointer to UTF-8 string to insert. String is returned by mdz_utf8_create() or mdz_utf8_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 is NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf8Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf8Source == NULL (MDZ_ERROR_SOURCE), or pUtf8Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert nCount UTF-16 characters in string. Characters are converted to UTF-32 characters before isertion. Size grows on added UTF-32 characters count. Length grows on symbols count. String reserved area and pItems should not overlap.mdz_bool mdz_utf32_insertUtf16_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const uint16_t* pItems, size_t nCount, enum mdz_endianness enEndianness, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertUtf16(pUtf32, nLeftPos, pItems, nCount, enEndianness, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pItems | UTF-16 items to insert | nCount | number of UTF-16 items to insert or 0 if pcItems until 0-terminator should be used | enEndianness | endianness of UTF-16 characters in pItems . Can be MDZ_ENDIAN_LITTLE for "little-endian" or MDZ_ENDIAN_BIG for "big-endian" | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if pItems contain invalid 2-byte character(s) (MDZ_ERROR_CONTENT), or invalid enEndianness (MDZ_ERROR_ENDIANNESS) | mdz_false | if string reserved area and pItems overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pItems == NULL (MDZ_ERROR_ITEMS), or nCount == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference Insert UTF-16 string pUtf16Source in string. Characters are converted to UTF-32 characters before isertion. Size grows on added UTF-32 characters count. Length grows on symbols count. String reserved area and pUtf16Source ->m_pData should not overlap.mdz_bool mdz_utf32_insertUtf16_string_async(struct mdz_Utf32* pUtf32, size_t nLeftPos, const void* pUtf16Source, mdz_bool bReserve, struct mdz_asyncData* pAsyncData); Synchronous version:
mdz_utf32_insertUtf16_string(pUtf32, nLeftPos, pUtf16Source, bReserve); Parameter | Description |
---|
pUtf32 | pointer to string returned by mdz_utf32_create() or mdz_utf32_create_attached() | nLeftPos | 0-based position to insert in symbols. If nLeftPos == Length or -1, items are appended. nLeftPos > Length is not allowed | pUtf16Source | pointer to UTF-16 string to insert. String is returned by mdz_utf16_create() or mdz_utf16_create_attached() | bReserve | if mdz_true reserve capacity when there is not enough space for insertion, otherwise mdz_false | pAsyncData | pointer to shared async data for asynchronous call, or NULL if call should be synchronous |
Return | Description |
---|
mdz_false | if pUtf32 == NULL | mdz_false | if bReserve == mdz_true and memory allocation failed (MDZ_ERROR_ALLOCATION) | mdz_false | if bReserve == mdz_true and there is not enough capacity for inserted data, but m_pData is attached using mdz_utf32_attachData() (MDZ_ERROR_ATTACHED) | mdz_false | if bReserve == mdz_false and there is not enough free Capacity in the string (MDZ_ERROR_CAPACITY) | mdz_false | if string reserved area and pUtf16Source ->m_pData overlap (MDZ_ERROR_OVERLAP) | mdz_true | if pUtf16Source == NULL (MDZ_ERROR_SOURCE), or pUtf16Source .Size == 0 (MDZ_ERROR_ZEROCOUNT), or nLeftPos > Length (MDZ_ERROR_BIGLEFT). No insertion is made | mdz_true | insertion succeeded | mdz_utf32 Reference
|