diff -r 6bcc0aa4be39 -r 889504eac4fb xml/cxmllibrary/src/tinytree/include/nw_tinytree_alloc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/cxmllibrary/src/tinytree/include/nw_tinytree_alloc.h Tue Aug 31 17:02:56 2010 +0300 @@ -0,0 +1,302 @@ +/* +* 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_TinyTree + + @synopsis: default + + @description: default + + ** ----------------------------------------------------------------------- **/ + +#ifndef NW_TREE_ALLOC_H +#define NW_TREE_ALLOC_H + + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +#define MIN_SEGMENT_SIZE 64 + +/* ----------------------------------------------------------------------- ** + These methods are private to the tiny tree module. +** ----------------------------------------------------------------------- **/ + + +/* ----------------------------------------------------------------------- ** + Storage mananagement: + + Header for a storage block. When the block is allocated by the + tree_alloc methods, the storage block will be contiguous with the + header. However, when the block was supplied externally (for + example, by the parser) the storage will be somewhere else. +** ----------------------------------------------------------------------- **/ + + +/** ----------------------------------------------------------------------- ** + @typedef: NW_TinyTree_RelativeOffset + + @synopsis: Relative offset into structure. + + @scope: public + @type: NW_Uint32 + + @description: Relative offset into structure. + ** ----------------------------------------------------------------------- **/ +typedef NW_Uint32 NW_TinyTree_RelativeOffset_t; + + +/** ----------------------------------------------------------------------- ** + @struct: NW_TinyTree_SegHeader + + @synopsis: Segment header. + + @scope: public + @variables: + NW_TinyTree_RelativeOffset_t next + Offset into segment. + + NW_TinyTree_Offset_t size + Offset. + + NW_TinyTree_Offset_t free_offset + Free offset. + + void* initializer NW_Byte__ptr__NW_TinyTree_Offset_t + Funcion pointer for initializer. + + NW_Byte* storage + Storage. + + @description: Segment header. + ** ----------------------------------------------------------------------- **/ +typedef struct NW_TinyTree_SegHeader_s{ + NW_TinyTree_RelativeOffset_t next; + NW_TinyTree_Offset_t size; + NW_TinyTree_Offset_t free_offset; + void (*initializer) (NW_Byte*, NW_TinyTree_Offset_t); + NW_Byte* storage; +} NW_TinyTree_SegHeader_t; + + +/** ----------------------------------------------------------------------- ** + @function: NW_TinyTree_segmentGetFreeSpace + + @synopsis: Get free space. + + @scope: public + + @parameters: + [in] NW_TinyTree_SegHeader_t* segment + The segment header. + + @description: Get free space. + + @returns: NW_TinyTree_Offset_t + Free space pointer. + + ** ----------------------------------------------------------------------- **/ +NW_TinyTree_Offset_t +NW_TinyTree_segmentGetFreeSpace(NW_TinyTree_SegHeader_t* segment); + + +/** ----------------------------------------------------------------------- ** + @function: NW_TinyTree_getFreeStorageSpace + + @synopsis: Get free storage space. + + @scope: public + + @parameters: + [in] NW_TinyTree_SegHeader_t* base + The segment header. + + @description: Get free storage space. + + @returns: NW_TinyTree_Offset_t + Free storage space pointer. + + ** ----------------------------------------------------------------------- **/ +NW_TinyTree_Offset_t +NW_TinyTree_getFreeStorageSpace(NW_TinyTree_SegHeader_t* base); + + +/** ----------------------------------------------------------------------- ** + @function: NW_TinyTree_addSegment + + @synopsis: Add segment. + + @scope: public + + @parameters: + [in] NW_TinyTree_SegHeader_t* base + The segment header. + + [in] NW_TinyTree_Offset_t size + Size of new segment. + + @description: Add segment. + + @returns: NW_TinyTree_SegHeader_t* + New header. + + ** ----------------------------------------------------------------------- **/ +NW_TinyTree_SegHeader_t* +NW_TinyTree_addSegment(NW_TinyTree_SegHeader_t* base, NW_TinyTree_Offset_t size); + + +/** ----------------------------------------------------------------------- ** + @function: NW_TinyTree_freeSegments + + @synopsis: Free segments. + + @scope: public + + @parameters: + [in] NW_TinyTree_SegHeader_t* base + The segment header. + + @description: Free segments. + ** ----------------------------------------------------------------------- **/ +void +NW_TinyTree_freeSegments(NW_TinyTree_SegHeader_t* base); + + +/** ----------------------------------------------------------------------- ** + @function: NW_TinyTree_offsetGetSegment + + @synopsis: Get segment header. + + @scope: public + + @parameters: + [in] NW_TinyTree_SegHeader_t* base + The segment header. + + [out] NW_TinyTree_Offset_t* offset + Data offset. + + @description: Get the segment header associated with an offset. This + allocates a new segment if the offset is beyond any + currently allocated segment. If a new segment is + allocated, the offset is readjusted to the beginning of + the new segment. + + @returns: NW_TinyTree_SegHeader_t* + Segment header or NULL if error. + + ** ----------------------------------------------------------------------- **/ +NW_TinyTree_SegHeader_t* +NW_TinyTree_offsetGetSegment(NW_TinyTree_SegHeader_t* base, NW_TinyTree_Offset_t* offset); + + +/** ----------------------------------------------------------------------- ** + @function: NW_TinyTree_offsetIncrement + + @synopsis: Increment. + + @scope: public + + @parameters: + [in] NW_TinyTree_SegHeader_t* base + The segment header. + + [in] NW_TinyTree_Offset_t offset + Offset. + + [in] NW_TinyTree_Offset_t delta + Delta. + + @description: Increment. + + @returns: NW_TinyTree_Offset_t + New offset. + + ** ----------------------------------------------------------------------- **/ +NW_TinyTree_Offset_t +NW_TinyTree_offsetIncrement(NW_TinyTree_SegHeader_t* base, + NW_TinyTree_Offset_t offset, + NW_TinyTree_Offset_t delta); + + +/** ----------------------------------------------------------------------- ** + @function: NW_TinyTree_addressGetSegment + + @synopsis: Get segment. + + @scope: public + + @parameters: + [in] NW_TinyTree_SegHeader_t* base + The segment header. + + [out] NW_Byte** address + Address of segment. + + @description: Get the segment header associated with an offset. + This allocates a new segment if the offset is beyond + any currently allocated segment. If a new segment is + allocated, the offset is readjusted to the beginning + of the new segment. + + @returns: NW_TinyTree_SegHeader_t* + The segment header. + + ** ----------------------------------------------------------------------- **/ +NW_TinyTree_SegHeader_t* +NW_TinyTree_addressGetSegment(NW_TinyTree_SegHeader_t* base, + NW_Byte** address); + + +/** ----------------------------------------------------------------------- ** + @function: NW_TinyTree_addressIncrement + + @synopsis: Increment. + + @scope: public + + @parameters: + [in] NW_TinyTree_SegHeader_t* base + The segment header. + + [in] NW_Byte* address + Address to increment. + + [in] NW_TinyTree_Offset_t delta + Delta. + + @description: Increment. + + @returns: NW_Byte* + New address. + + ** ----------------------------------------------------------------------- **/ +NW_Byte* +NW_TinyTree_addressIncrement(NW_TinyTree_SegHeader_t* base, + NW_Byte* address, + NW_TinyTree_Offset_t delta); + + +#ifdef __cplusplus +} // extern "C" { +#endif /* __cplusplus */ + +#endif /* NW_TREE_ALLOC_H */