xml/cxmllibrary/src/tinytree/include/nw_tinytree_alloc.h
branchRCL_3
changeset 20 889504eac4fb
--- /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 */