diff -r 6bcc0aa4be39 -r 889504eac4fb xmlsrv_plat/cxml_library_api/inc/nw_string_string.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xmlsrv_plat/cxml_library_api/inc/nw_string_string.h Tue Aug 31 17:02:56 2010 +0300 @@ -0,0 +1,909 @@ +/* +* Copyright (c) 2000 - 2001 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +/** ----------------------------------------------------------------------- ** + @package: NW_String + + @synopsis: default + + @description: default + + ** ----------------------------------------------------------------------- **/ + +#ifndef NW_STRING_STRING_H +#define NW_STRING_STRING_H + +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +/** ----------------------------------------------------------------------- ** + @struct: NW_String_String + + @synopsis: The basic wbxml string type. + + @scope: public + @variables: + NW_Uint32 length + In bytes. + + NW_Byte* storage + default + + @description: The basic wbxml string type. + ** ----------------------------------------------------------------------- **/ +typedef struct NW_String_String_s{ + NW_Uint32 length; + NW_Byte* storage; +}NW_String_String_t; + +/* Deprecated - Left in for backward compatibility */ +typedef struct NW_String_String_s NW_String_t; + +typedef struct NW_String_String_s NW_String_UCS2String_t; + +/** ----------------------------------------------------------------------- ** + @function: NW_String_new + + @synopsis: Consructor. + + @scope: public + + @description: Constructor. + + @returns: NW_String_t* + New string or NULL if out of memory. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_String_t* +NW_String_new (void); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_initialize + + @synopsis: Initialize. + + @scope: public + + @parameters: + [in] NW_String_t* string + The string. + + [in] void* storage + The storage. + + [in] NW_Uint32 encoding + The encoding. + + @description: Initialize the string by assigning length, encoding + and storage. Note that the length is calculated. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + String initialized. + + [NW_STAT_FAILURE] + String not initialized. + + [NW_STAT_WBXML_ERROR_CHARSET_UNSUPPORTED] + Unsupported charset. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_initialize (NW_String_t* string, void *storage, NW_Uint32 encoding); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_delete + + @synopsis: Delete. + + @scope: public + + @parameters: + [in-out] NW_String_t* string + The string. + + @description: Freeing a string may not free the storage. String storage + is complicated by the fact that it can be allocated outside + the bounds of the parser. If so, it is not freed here. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C void +NW_String_delete(NW_String_t* string); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_getByteCount + + @synopsis: Returns number of bytes in the string including NULL + terminator. + + @scope: public + + @parameters: + [in] NW_String_t* string + The string. + + @description: Returns number of bytes in the string including NULL + terminator. + + @returns: NW_Uint16 + Length in bytes. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Uint32 +NW_String_getByteCount (NW_String_t* string); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_getCharCount + + @synopsis: Returns number of characters in the string excluding NULL + terminator. + + @scope: public + + @parameters: + [in] NW_String_t* string + The string. + + [in] NW_Uint32 encoding + The encoding. + + @description: Returns number of characters in the string excluding NULL + terminator. + + @returns: NW_Uint16 + Length of string in characters. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Uint16 +NW_String_getCharCount(NW_String_t* string, NW_Uint32 encoding); + +/* + * The following function is a duplication of NW_String_getByteCount to + * handle big files. For not affecting the components other than + * browser, this function is only called inside the browser.). + * + * INSTEAD OF CALLING NW_String_getByteCount, ALL THE BROWSER CODES SHOULD + * CALL THIS DUPLICATE FUNCTION TO GET CHARACTER COUNTS. + * + */ +IMPORT_C NW_Uint32 +NW_String_getCharCount32(NW_String_t* string, NW_Uint32 encoding); + +/** ----------------------------------------------------------------------- ** + @function: NW_String_getStorage + + @synopsis: Returns NULL or valid storage. + + @scope: public + + @parameters: + [in] NW_String_t* str + The string. + + @description: Returns the storage occupied by the string (in bytes). + + @returns: NW_Byte* + String storage. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Byte* +NW_String_getStorage(NW_String_t* str); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_equals + + @synopsis: Determines if strings are equal. + + @scope: public + + @parameters: + [in] const NW_String_t* string1 + The string. + + [in] const NW_String_t* string2 + The other string. + + @description: This function assumes the encoding of each string is + the same. It does not attempt to convert strings of + different encodings because encoding is regarded as + implicit for XML strings. NOte that if both string + pointers are NULL thay are considered unequal. + + @returns: NW_Int32 + 1 if the strings are equal; otherwise 0. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Int32 +NW_String_equals(const NW_String_t* string1, const NW_String_t* string2); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_getUserOwnsStorage + + @synopsis: Get user owns storage flag. + + @scope: public + + @parameters: + [in] NW_String_t* s + The string. + + @description: Get user owns storage flag. If the user owns the storage + it means that this string is the sole user of the storage + and can delete it when done. + + @returns: NW_Bool + NW_TRUE if user owns storage, otherwise NW_FALSE. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Bool +NW_String_getUserOwnsStorage(NW_String_t* s); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_setUserOwnsStorage + + @synopsis: Set user owns storage flag. + + @scope: public + + @parameters: + [in-out] NW_String_t* s + The string. + + @description: Set user owns storage flag. (see NW_String_getUserOwnsStorage) + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + Always returns success. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_setUserOwnsStorage(NW_String_t* s); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_clearUserOwnsStorage + + @synopsis: Clear user owns storage flag. + + @scope: public + + @parameters: + [in-out] NW_String_t* s + The string. + + @description: Clear user owns storage flag. This means that someone + else may own the storage. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + Always returns success. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_clearUserOwnsStorage(NW_String_t* s); + +/* ----------------------------------------------------------------------- ** + Conversion routines +** ----------------------------------------------------------------------- **/ + +/** ----------------------------------------------------------------------- ** + @function: NW_String_stringToUCS2 + + @synopsis: Convert string to UCS2. + + @scope: public + + @parameters: + [out] NW_String_UCS2String_t** u + The converted string. + + [in] NW_String_t* string + The string to convert. + + [in] NW_Uint32 encoding + The encoding of the string to be converted + + @description: Converts a string of a given encoding to ucs2_char. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + String converted. + + [NW_STAT_FAILURE] + String not converted. + + [NW_STAT_WBXML_ERROR_CHARSET_UNSUPPORTED] + Unsupported charset. + + ** ----------------------------------------------------------------------- **/ +NW_Status_t +NW_String_stringToUCS2(NW_String_UCS2String_t** u, NW_String_t* string, NW_Uint32 encoding); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_UCS2BuffToString + + @synopsis: Convert UCS2 buffer to string. + + @scope: public + + @parameters: + [in] NW_String_UCS2Buff_t* u + Source of data to convert. + + [out] NW_String_t* string + The converted string. + + [in] NW_Uint32 encoding + default + + @description: Convert UCS2 buffer to string. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + String converted. + + [NW_STAT_OUT_OFMEMORY] + Out of memory. + + [NW_STAT_WBXML_ERROR_CHARSET_UNSUPPORTED] + Unsupported charset. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_UCS2BuffToString(NW_String_UCS2Buff_t* u, NW_String_t* string, NW_Uint32 encoding); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_stringToUCS2Buff + + @synopsis: Convert string to UCS2 buffer. + + @scope: public + + @parameters: + [in] NW_String_t* string + The string. + + [in] NW_Uint32 encoding + Initial encoding. + + @description: Convert a NW_String_t (in any of the supported character + set encodings) to a UCS2Buff string. Caller is responsible + for freeing the pointer returned by this function. Returned + array is null-terminated. + + @returns: NW_String_UCS2Buff_t* + USC2 buffer or NULL if it fails. + + ** ----------------------------------------------------------------------- **/ +NW_String_UCS2Buff_t* +NW_String_stringToUCS2Buff(NW_String_t* string, NW_Uint32 encoding); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_ucs2CharToString + + @synopsis: Convert UCS2 characters to string. + @scope: public + + @parameters: + [in-out] NW_String_t* string + The string. + + [in] NW_Ucs2* u + The characters to convert. + + [in] NW_Uint32 encoding + Target encoding. + + @description: Convert UCS2 characters to string. + + @returns: NW_Status_t + The status of the operation. + + [NW_STAT_SUCCESS] + String filled with chars. + + [NW_STAT_WBXML_ERROR_CHARSET_UNSUPPORTED] + Unsupported encoding. + + [NW_STAT_OUT_OF_MEMORY] + String storage could not be allocated. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_ucs2CharToString (NW_String_t* string, NW_Ucs2* u, NW_Uint32 encoding); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_entityToString + + @synopsis: Convert entity to string. + @scope: public + + @parameters: + [in] NW_Uint32 entity + default + + [in-out] NW_String_t* str + The string. + + [in] NW_Uint32 encoding + Target encoding. + + @description: Convert entity to string. + + @returns: NW_Status_t + The status of the operation. + + [NW_STAT_SUCCESS] + String initialized from entity. + + [NW_STAT_WBXML_ERROR_CHARSET_UNSUPPORTED] + Unsupported encoding. + + [NW_STAT_OUT_OF_MEMORY] + String storage could not be allocated. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_entityToString(NW_Uint32 entity, NW_String_t* str, NW_Uint32 encoding); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_byteToString + + @synopsis: Convert byte array to string. + + @scope: public + + @parameters: + [in] NW_Byte* s + Bytes to initialize string with. + + [in-out] NW_String_t* str + The string. + + [in] NW_Uint32 encoding + The encoding. + + @description: Convert byte to string. + + @returns: NW_Status_t + The status of the operation. + + [NW_STAT_SUCCESS] + String initialized from bytes. + + [NW_STAT_FAILURE] + String not initialized. + + ** ----------------------------------------------------------------------- **/ +NW_Status_t +NW_String_byteToString(NW_Byte* s, NW_String_t* str, NW_Uint32 encoding); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_tokenToString + + @synopsis: Token to string. + + @scope: public + + @parameters: + [in] NW_Uint32 token + default + + [in-out] NW_String_t* str + The string. + + [in] NW_Uint32 encoding + default + + @description: Token to string. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + String converted. + + [NW_STAT_FAILURE] + Token not found in current dictionary. + + [NW_STAT_OUT_OF_MEMORY] + Out of memory. + + [NW_STAT_WBXML_ERROR_CHARSET_UNSUPPORTED] + Unsupported charset. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_tokenToString(NW_Uint32 token, NW_String_t* str, NW_Uint32 encoding); + +/* ----------------------------------------------------------------------- ** + String manipulation functions +** ----------------------------------------------------------------------- **/ + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_copy + + @synopsis: Copy string duplicating storage. + + @scope: public + + @parameters: + [out] NW_String_t* dest + The destination string. + + [in] NW_String_t* source + The source string. + + @description: If the source owns the storage (i.e. it can modify and/or + delete it) than performs a deep copy. This duplicates the + storage. Otherwise it performs a shallow copy. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + String copied. + + [NW_STAT_OUT_OF_MEMORY] + Ran out of memory. + + ** ----------------------------------------------------------------------- **/ +NW_Status_t +NW_String_copy(NW_String_t* dest, NW_String_t* source); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_shallowCopy + + @synopsis: Copies without duplicating storage. + + @scope: public + + @parameters: + [out] NW_String_t* dest + The destination string. + + [in] NW_String_t* source + The source string. + + @description: Performs a shallow copy. The storage is shared with + the copy, not duplicated. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + Always returns success. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_shallowCopy(NW_String_t* dest, NW_String_t* source); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_deepCopy + + @synopsis: Copy string duplicating storage. + + @scope: public + + @parameters: + [out] NW_String_t* dest + The destination string. + + [in] NW_String_t* source + The source string. + + @description: Performs a deep copy. The storage is duplicated so it + is not shared with the original. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + String copied. + + [NW_STAT_OUT_OF_MEMORY] + Ran out of memory. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_deepCopy(NW_String_t* dest, NW_String_t* source); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_concatenate + + @synopsis: Concatenates two strings together. + + @scope: public + + @parameters: + [in-out] NW_String_t* dest + The destination string. + + [in] NW_String_t* source + The source string. + + [in] NW_Uint32 encoding + Encoding both strings are assumed to have. + + @description: Concatenated two strings together. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + String copied. + + [NW_STAT_OUT_OF_MEMORY] + Ran out of memory. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_concatenate(NW_String_t* dest, NW_String_t* source, NW_Uint32 encoding); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_findChar + + @synopsis: Finds char in string. + + @scope: public + + @parameters: + [in] NW_String_t* string + The string. + + [in] NW_Int32 character + Character to find. + + @description: Find char in string. + + @returns: NW_Byte* + Pointer to character if found, otherwise NULL. + + ** ----------------------------------------------------------------------- **/ +NW_Byte* +NW_String_findChar(NW_String_t* string, NW_Int32 character, NW_Uint32 encoding); + + +/* ----------------------------------------------------------------------- ** + Functions +** ----------------------------------------------------------------------- **/ + +/** ----------------------------------------------------------------------- ** + @function: NW_String_ucs2CharInit + + @synopsis: Initialize UCS2 characters. + + @scope: public + + @parameters: + [out] NW_Ucs2** data + Allocated storage. + + [in] NW_Uint32 length + The length. + + @description: Allocates enough storage to hold the specified number + of characters. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + String copied. + + [NW_STAT_OUT_OF_MEMORY] + Ran out of memory. + + ** ----------------------------------------------------------------------- **/ +NW_Status_t +NW_String_ucs2CharInit(NW_Ucs2** data, NW_Uint32 length); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_ucs2CharLength + + @synopsis: Get character length. + + @scope: public + + @parameters: + [in] NW_Ucs2* data + Buffer to count. + + @description: Get character length. + + @returns: NW_Int32 + Length of buffer in characters. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Int32 +NW_String_ucs2CharLength (NW_Ucs2* data); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_byteToUCS2Char + + @synopsis: Convert byte to UCS2 characters. + + @scope: public + + @parameters: + [in] NW_Byte* b + default + + [in] NW_Uint32 length + default + + [out] NW_Ucs2** data + default + + @description: Given an arbitrary NW_Byte array with no known character + encoding, convert it to a NW_Ucs2 string. Actually it + copies the bytes and assumes the source is UCS2 encoding. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + Bytes copied. + + [NW_STAT_OUT_OF_MEMORY] + Ran out of memory. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_byteToUCS2Char (NW_Byte* b, NW_Uint32 length, NW_Ucs2** data); + + +/** ----------------------------------------------------------------------- ** + @function: NW_String_entityToUCS2Char + + @synopsis: Convert entity to UCS2 character. + + @scope: public + + @parameters: + [in] NW_Uint32 entity + default + + [out] NW_Ucs2** data + default + + @description: Convert entity to UCS2 character. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + Bytes copied. + + [NW_STAT_OUT_OF_MEMORY] + Ran out of memory. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_entityToUCS2Char(NW_Uint32 entity, NW_Ucs2** data); + +/* + * Given an arbitrary NW_Byte array with no known character encoding, + * convert it to a NW_Ucs2 string. + * + */ +/* Not used. 8/14/01 */ +/* +NW_Status_t +NW_String_tokenToUCS2Char(NW_Uint32 token, NW_Ucs2** data); +*/ + +/** ----------------------------------------------------------------------- ** + @function: NW_String_stringToUCS2Char + + @synopsis: default + + @scope: public + + @parameters: + [in] const string + default + + [in] NW_Uint32 encoding + default + + [out] NW_Ucs2 **data + default + + @description: default + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + Bytes copied. + + [NW_STAT_FAILURE] + No bytes to copy. + + [NW_STAT_OUT_OF_MEMORY] + Ran out of memory. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_stringToUCS2Char(const NW_String_t* string, NW_Uint32 encoding, NW_Ucs2 **data); + +/** ----------------------------------------------------------------------- ** + @function: NW_String_deleteStorage + + @synopsis: Delete storage. + + @scope: public + + @parameters: + [in-out] NW_String_t* s + The string. + + @description: Delete storage if user owns it otherwise does nothing. + + @returns: NW_Status_t + Status of operation. + + [NW_STAT_SUCCESS] + Always returns success. + + ** ----------------------------------------------------------------------- **/ +IMPORT_C NW_Status_t +NW_String_deleteStorage(NW_String_t* s); + +#ifdef __cplusplus +} /*extern "C" { */ +#endif /* __cplusplus */ + +#endif /* NW_STRING_STRING_H */