xml/cxmllibrary/src/tinytree/include/nw_tinytree_alloc.h
author hgs
Wed, 23 Jun 2010 20:27:15 +0530
changeset 24 74f0b3eb154c
permissions -rw-r--r--
201024
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2000 - 2001 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: 
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    20
    @package:     NW_TinyTree
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
    @synopsis:    default
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
    @description: default
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
#ifndef NW_TREE_ALLOC_H
hgs
parents:
diff changeset
    29
#define NW_TREE_ALLOC_H
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
#ifdef __cplusplus
hgs
parents:
diff changeset
    33
extern "C" {
hgs
parents:
diff changeset
    34
#endif /* __cplusplus */
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
#define MIN_SEGMENT_SIZE 64
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
/* ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    40
   These methods are private to the tiny tree module.
hgs
parents:
diff changeset
    41
** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
 
hgs
parents:
diff changeset
    44
/* ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    45
   Storage mananagement:
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
   Header for a storage block. When the block is allocated by the
hgs
parents:
diff changeset
    48
   tree_alloc methods, the storage block will be contiguous with the
hgs
parents:
diff changeset
    49
   header. However, when the block was supplied externally (for
hgs
parents:
diff changeset
    50
   example, by the parser) the storage will be somewhere else.  
hgs
parents:
diff changeset
    51
** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    55
    @typedef:     NW_TinyTree_RelativeOffset
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
    @synopsis:    Relative offset into structure.
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
    @scope:       public
hgs
parents:
diff changeset
    60
    @type:        NW_Uint32
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
    @description: Relative offset into structure.
hgs
parents:
diff changeset
    63
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    64
typedef NW_Uint32 NW_TinyTree_RelativeOffset_t;
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    68
    @struct:      NW_TinyTree_SegHeader
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    @synopsis:    Segment header.
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    @scope:       public
hgs
parents:
diff changeset
    73
    @variables:
hgs
parents:
diff changeset
    74
       NW_TinyTree_RelativeOffset_t next
hgs
parents:
diff changeset
    75
                  Offset into segment.
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
       NW_TinyTree_Offset_t size
hgs
parents:
diff changeset
    78
                  Offset.
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
       NW_TinyTree_Offset_t free_offset
hgs
parents:
diff changeset
    81
                  Free offset.
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
       void* initializer NW_Byte__ptr__NW_TinyTree_Offset_t
hgs
parents:
diff changeset
    84
                  Funcion pointer for initializer.
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
       NW_Byte* storage
hgs
parents:
diff changeset
    87
                  Storage.
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
    @description: Segment header.
hgs
parents:
diff changeset
    90
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    91
typedef struct NW_TinyTree_SegHeader_s{
hgs
parents:
diff changeset
    92
  NW_TinyTree_RelativeOffset_t next;
hgs
parents:
diff changeset
    93
  NW_TinyTree_Offset_t size;
hgs
parents:
diff changeset
    94
  NW_TinyTree_Offset_t free_offset;
hgs
parents:
diff changeset
    95
  void (*initializer) (NW_Byte*, NW_TinyTree_Offset_t);
hgs
parents:
diff changeset
    96
  NW_Byte* storage;
hgs
parents:
diff changeset
    97
} NW_TinyTree_SegHeader_t;
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   101
    @function:    NW_TinyTree_segmentGetFreeSpace
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    @synopsis:    Get free space.
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    @scope:       public
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    @parameters:
hgs
parents:
diff changeset
   108
       [in] NW_TinyTree_SegHeader_t* segment
hgs
parents:
diff changeset
   109
                  The segment header.
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
    @description: Get free space.
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
    @returns:     NW_TinyTree_Offset_t
hgs
parents:
diff changeset
   114
                  Free space pointer.
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   117
NW_TinyTree_Offset_t 
hgs
parents:
diff changeset
   118
NW_TinyTree_segmentGetFreeSpace(NW_TinyTree_SegHeader_t* segment);
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   122
    @function:    NW_TinyTree_getFreeStorageSpace
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
    @synopsis:    Get free storage space.
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
    @scope:       public
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
    @parameters:
hgs
parents:
diff changeset
   129
       [in] NW_TinyTree_SegHeader_t* base
hgs
parents:
diff changeset
   130
                  The segment header.
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
    @description: Get free storage space.
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
    @returns:     NW_TinyTree_Offset_t
hgs
parents:
diff changeset
   135
                  Free storage space pointer.
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   138
NW_TinyTree_Offset_t
hgs
parents:
diff changeset
   139
NW_TinyTree_getFreeStorageSpace(NW_TinyTree_SegHeader_t* base);
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   143
    @function:    NW_TinyTree_addSegment
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
    @synopsis:    Add segment.
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
    @scope:       public
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
    @parameters:
hgs
parents:
diff changeset
   150
       [in] NW_TinyTree_SegHeader_t* base
hgs
parents:
diff changeset
   151
                  The segment header.
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
       [in] NW_TinyTree_Offset_t size
hgs
parents:
diff changeset
   154
                  Size of new segment.
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
    @description: Add segment.
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
    @returns:     NW_TinyTree_SegHeader_t*
hgs
parents:
diff changeset
   159
                  New header.
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   162
NW_TinyTree_SegHeader_t*
hgs
parents:
diff changeset
   163
NW_TinyTree_addSegment(NW_TinyTree_SegHeader_t* base, NW_TinyTree_Offset_t size);
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   167
    @function:    NW_TinyTree_freeSegments
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
    @synopsis:    Free segments.
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
    @scope:       public
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    @parameters:
hgs
parents:
diff changeset
   174
       [in] NW_TinyTree_SegHeader_t* base
hgs
parents:
diff changeset
   175
                  The segment header.
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    @description: Free segments.
hgs
parents:
diff changeset
   178
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   179
void 
hgs
parents:
diff changeset
   180
NW_TinyTree_freeSegments(NW_TinyTree_SegHeader_t* base);
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   184
    @function:    NW_TinyTree_offsetGetSegment
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
    @synopsis:    Get segment header.
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
    @scope:       public
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    @parameters:
hgs
parents:
diff changeset
   191
       [in] NW_TinyTree_SegHeader_t* base
hgs
parents:
diff changeset
   192
                  The segment header.
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
       [out] NW_TinyTree_Offset_t* offset
hgs
parents:
diff changeset
   195
                  Data offset.
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
    @description: Get the segment header associated with an offset. This 
hgs
parents:
diff changeset
   198
                  allocates a new segment if the offset is beyond any 
hgs
parents:
diff changeset
   199
                  currently allocated segment. If a new segment is 
hgs
parents:
diff changeset
   200
                  allocated, the offset is readjusted to the beginning of 
hgs
parents:
diff changeset
   201
                  the new segment.
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
    @returns:     NW_TinyTree_SegHeader_t*
hgs
parents:
diff changeset
   204
                  Segment header or NULL if error.
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   207
NW_TinyTree_SegHeader_t*
hgs
parents:
diff changeset
   208
NW_TinyTree_offsetGetSegment(NW_TinyTree_SegHeader_t* base, NW_TinyTree_Offset_t* offset);
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   212
    @function:    NW_TinyTree_offsetIncrement
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
    @synopsis:    Increment.
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
    @scope:       public
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
    @parameters:
hgs
parents:
diff changeset
   219
       [in] NW_TinyTree_SegHeader_t* base
hgs
parents:
diff changeset
   220
                  The segment header.
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
       [in] NW_TinyTree_Offset_t offset
hgs
parents:
diff changeset
   223
                  Offset.
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
       [in] NW_TinyTree_Offset_t delta
hgs
parents:
diff changeset
   226
                  Delta.
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
    @description: Increment.
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
    @returns:     NW_TinyTree_Offset_t
hgs
parents:
diff changeset
   231
                  New offset.
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   234
NW_TinyTree_Offset_t
hgs
parents:
diff changeset
   235
NW_TinyTree_offsetIncrement(NW_TinyTree_SegHeader_t* base, 
hgs
parents:
diff changeset
   236
            NW_TinyTree_Offset_t offset, 
hgs
parents:
diff changeset
   237
            NW_TinyTree_Offset_t delta);
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   241
    @function:    NW_TinyTree_addressGetSegment
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
    @synopsis:   Get segment.
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
    @scope:       public
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
    @parameters:
hgs
parents:
diff changeset
   248
       [in] NW_TinyTree_SegHeader_t* base
hgs
parents:
diff changeset
   249
                  The segment header.
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
       [out] NW_Byte** address
hgs
parents:
diff changeset
   252
                  Address of segment.
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
    @description: Get the segment header associated with an offset. 
hgs
parents:
diff changeset
   255
                  This allocates a new segment if the offset is beyond 
hgs
parents:
diff changeset
   256
                  any currently allocated segment. If a new segment is 
hgs
parents:
diff changeset
   257
                  allocated, the offset is readjusted to the beginning 
hgs
parents:
diff changeset
   258
                  of the new segment.  
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
    @returns:     NW_TinyTree_SegHeader_t*
hgs
parents:
diff changeset
   261
                  The segment header.
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   264
NW_TinyTree_SegHeader_t*
hgs
parents:
diff changeset
   265
NW_TinyTree_addressGetSegment(NW_TinyTree_SegHeader_t* base, 
hgs
parents:
diff changeset
   266
                              NW_Byte** address);
hgs
parents:
diff changeset
   267
  
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   270
    @function:    NW_TinyTree_addressIncrement
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
    @synopsis:    Increment.
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
    @scope:       public
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
    @parameters:
hgs
parents:
diff changeset
   277
       [in] NW_TinyTree_SegHeader_t* base
hgs
parents:
diff changeset
   278
                  The segment header.
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
       [in] NW_Byte* address
hgs
parents:
diff changeset
   281
                  Address to increment.
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
       [in] NW_TinyTree_Offset_t delta
hgs
parents:
diff changeset
   284
                  Delta.
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
    @description: Increment.
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
    @returns:     NW_Byte*
hgs
parents:
diff changeset
   289
                  New address.
hgs
parents:
diff changeset
   290
hgs
parents:
diff changeset
   291
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   292
NW_Byte*
hgs
parents:
diff changeset
   293
NW_TinyTree_addressIncrement(NW_TinyTree_SegHeader_t* base, 
hgs
parents:
diff changeset
   294
             NW_Byte* address, 
hgs
parents:
diff changeset
   295
             NW_TinyTree_Offset_t delta);
hgs
parents:
diff changeset
   296
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
#ifdef __cplusplus
hgs
parents:
diff changeset
   299
} // extern "C" {
hgs
parents:
diff changeset
   300
#endif /* __cplusplus */
hgs
parents:
diff changeset
   301
hgs
parents:
diff changeset
   302
#endif  /* NW_TREE_ALLOC_H */