--- /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 */