xmlsrv_plat/cxml_library_api/inc/nw_tinytree.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
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    21
    @package:     NW_TinyTree
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
    @synopsis:    default
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
    @description: default
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#ifndef NW_TINY_TREE_H
hgs
parents:
diff changeset
    30
#define NW_TINY_TREE_H
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
#include <xml/cxml/cxml_proj.h>
hgs
parents:
diff changeset
    33
#include <xml/cxml/nw_tinytree_treevector.h>
hgs
parents:
diff changeset
    34
#include <xml/cxml/nw_tinytree_ebuffer.h>
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
#ifdef __cplusplus
hgs
parents:
diff changeset
    37
extern "C" {
hgs
parents:
diff changeset
    38
#endif /* __cplusplus */
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
/* ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    42
   Tiny tree definitions   
hgs
parents:
diff changeset
    43
** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    48
    @typedef:     NW_TinyTree_Index
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
    @synopsis:    An index into the node array.
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
    @scope:       public
hgs
parents:
diff changeset
    53
    @type:        CXML_Vector_Metric_t
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
    @description: An index into the node array.
hgs
parents:
diff changeset
    56
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    57
typedef CXML_Vector_Metric_t NW_TinyTree_Index_t; 
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    61
    @typedef:     NW_TinyTree_Offset
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    @synopsis:    An offset into the source buffer.
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    @scope:       public
hgs
parents:
diff changeset
    66
    @type:        NW_Uint32
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
    @description: An offset into the source buffer.
hgs
parents:
diff changeset
    69
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    70
/*
hgs
parents:
diff changeset
    71
typedef NW_Uint32 NW_TinyTree_Offset_t;
hgs
parents:
diff changeset
    72
*/
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
/*----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    75
   Node flags  
hgs
parents:
diff changeset
    76
** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
#define TNODE_FLAG_LASTSIBLING   0x8000 /* My next_sibling points to parent */
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
#define TNODE_FLAG_ROOT          0x4000 /* I'm the tree root */
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
#define TNODE_FLAG_TREE          0x2000 /* I'm a special sentinel node marking
hgs
parents:
diff changeset
    83
                                           the beginning of a segment */
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
#define TNODE_FLAG_ORPHAN        0x1000 /* A node not part of a tree */
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
#define TNODE_USR_FLAGS          0x0FFF  /* 12 bits available to tree user */
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
    91
    @struct:      NW_TinyTree_Node
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
    @synopsis:    Tiny tree node structure.
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
    @scope:       public
hgs
parents:
diff changeset
    96
    @variables:
hgs
parents:
diff changeset
    97
       NW_Uint16 flags
hgs
parents:
diff changeset
    98
                  Node description flags.
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
       NW_TinyTree_Offset_t source_offset
hgs
parents:
diff changeset
   101
                  Offset of node data into original buffer.
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
       NW_TinyTree_Index_t first_child
hgs
parents:
diff changeset
   104
                  Index of first child of this node.
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
       NW_TinyTree_Index_t next_sibling
hgs
parents:
diff changeset
   107
                  Index of next sibling of this node.
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
    @description: Tiny tree node structure.
hgs
parents:
diff changeset
   110
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   111
typedef struct NW_TinyTree_Node_s NW_TinyTree_Node_t;
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
struct NW_TinyTree_Node_s {
hgs
parents:
diff changeset
   114
  NW_Uint16 flags;
hgs
parents:
diff changeset
   115
  NW_TinyTree_Offset_t source_offset;
hgs
parents:
diff changeset
   116
  NW_TinyTree_Node_t* first_child;
hgs
parents:
diff changeset
   117
  NW_TinyTree_Node_t* next_sibling;
hgs
parents:
diff changeset
   118
  NW_TinyTree_t* tree;
hgs
parents:
diff changeset
   119
  NW_Uint16 token;
hgs
parents:
diff changeset
   120
};
hgs
parents:
diff changeset
   121
   
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   124
    @struct:      NW_TinyTree_TinyTree
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
    @synopsis:    Tree structure. 
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
    @scope:       public
hgs
parents:
diff changeset
   129
    @variables:
hgs
parents:
diff changeset
   130
       NW_TinyTree_TreeVector_t* tree
hgs
parents:
diff changeset
   131
                  Node data.
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
       NW_TinyTree_Index_t root_index
hgs
parents:
diff changeset
   134
                  Node data.
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
       NW_TinyTree_EBuffer_t* ebuffer
hgs
parents:
diff changeset
   137
                  Buffer data.
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
       void* context
hgs
parents:
diff changeset
   140
                  Context accessible from tree (typically the parser that 
hgs
parents:
diff changeset
   141
                  builds and reads the tree).
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
    @description: Tree structure. Provides access points for root 
hgs
parents:
diff changeset
   144
                  and buffer data.
hgs
parents:
diff changeset
   145
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   146
typedef struct NW_TinyTree_TinyTree_s {
hgs
parents:
diff changeset
   147
  /* Node data */
hgs
parents:
diff changeset
   148
  NW_TinyTree_TreeVector_t* tree;
hgs
parents:
diff changeset
   149
  NW_TinyTree_Index_t root_index;
hgs
parents:
diff changeset
   150
  /* Buffer data */
hgs
parents:
diff changeset
   151
  NW_TinyTree_EBuffer_t* ebuffer;
hgs
parents:
diff changeset
   152
  /* Context accessible from tree (typically the parser that builds and reads the tree) */
hgs
parents:
diff changeset
   153
  void* context;
hgs
parents:
diff changeset
   154
}NW_TinyTree_TinyTree_t;
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   157
    @struct:      NW_TinyTree_TreeNode
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
    @synopsis:    A sentinel node that resides at the start of 
hgs
parents:
diff changeset
   160
                  every tree vector segment.
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    @scope:       public
hgs
parents:
diff changeset
   163
    @variables:
hgs
parents:
diff changeset
   164
       NW_Uint16 flags
hgs
parents:
diff changeset
   165
                  Node description flags.
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
       NW_TinyTree_t* tree
hgs
parents:
diff changeset
   168
                  The tree.
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
    @description: A special sentinel node that resides at the start of 
hgs
parents:
diff changeset
   171
                  every tree vector segment, pointing to the tree itself.
hgs
parents:
diff changeset
   172
                  This is used by applications like the DOM api that do 
hgs
parents:
diff changeset
   173
                  not have a reference to the tree when operating on nodes.
hgs
parents:
diff changeset
   174
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   175
typedef struct NW_TinyTree_TreeNode_s{
hgs
parents:
diff changeset
   176
  NW_Uint16 flags;
hgs
parents:
diff changeset
   177
  NW_TinyTree_t* tree;
hgs
parents:
diff changeset
   178
}NW_TinyTree_TreeNode_t;
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
 /* ----------------------------------------------------------------------- ** 
hgs
parents:
diff changeset
   182
    Public tiny tree API  
hgs
parents:
diff changeset
   183
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   188
    @function:    NW_TinyTree_new
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    @synopsis:    Initialize a tree.
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
    @scope:       public
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
    @description: Initialize a tree.Allocates memory and initializes variables.
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
    @returns:     NW_TinyTree_TinyTree_t*
hgs
parents:
diff changeset
   197
                  The new tree.
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   200
NW_TinyTree_t*
hgs
parents:
diff changeset
   201
NW_TinyTree_new();
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   205
    @function:    NW_TinyTree_construct
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
    @synopsis:    Constructor.
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
    @scope:       public
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
    @parameters:
hgs
parents:
diff changeset
   212
       [in] NW_TinyTree_TinyTree_t* tree
hgs
parents:
diff changeset
   213
                  The tiny tree.
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
       [in] CXML_Vector_Metric_t initialNodeCount
hgs
parents:
diff changeset
   216
                  Initiali size of vector of nodes.
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
       [in] void* buffer
hgs
parents:
diff changeset
   219
                  Link buffer into ebuffer.
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
       [in] NW_TinyTree_Offset_t buffsz
hgs
parents:
diff changeset
   222
                  Size of block of data.
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
       [in] void* context
hgs
parents:
diff changeset
   225
                  Context (i.e. parser).
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
       [in] NW_Bool freeBuff
hgs
parents:
diff changeset
   228
                  Buffer deallocation flag.
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
    @description: Constructor. Adds data to the structure returned 
hgs
parents:
diff changeset
   231
                  by NW_TinyTree_new.
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   234
                  Status of operation.
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   237
                  Tree created.
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
       [NW_STAT_FAILURE]
hgs
parents:
diff changeset
   240
                  Out of memory or general error.
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   243
NW_Status_t
hgs
parents:
diff changeset
   244
NW_TinyTree_construct(NW_TinyTree_t* tree,
hgs
parents:
diff changeset
   245
                      CXML_Vector_Metric_t initialNodeCount,
hgs
parents:
diff changeset
   246
                      void* buffer,
hgs
parents:
diff changeset
   247
                      NW_TinyTree_Offset_t buffsz,
hgs
parents:
diff changeset
   248
                      void* context,
hgs
parents:
diff changeset
   249
                      NW_Bool freeBuff);
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   253
    @function:    NW_TinyTree_destruct
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
    @synopsis:    Clean up tree resources.
hgs
parents:
diff changeset
   256
hgs
parents:
diff changeset
   257
    @scope:       public
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
    @parameters:
hgs
parents:
diff changeset
   260
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   261
                  default
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
    @description: Clean up tree resources.
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   266
void
hgs
parents:
diff changeset
   267
NW_TinyTree_destruct(NW_TinyTree_t* tree);
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   271
    @function:    NW_TinyTree_createNode
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
    @synopsis:    Create an unattached node.
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
    @scope:       public
hgs
parents:
diff changeset
   276
hgs
parents:
diff changeset
   277
    @parameters:
hgs
parents:
diff changeset
   278
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   279
                  The tiny tree.
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
       [in] NW_TinyTree_Offset_t offset
hgs
parents:
diff changeset
   282
                  Offset into buffer.
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
    @description: Create an unattached node which references the source 
hgs
parents:
diff changeset
   285
                  buffer at offset.
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   288
                  Node or NULL if memory could not be allocated.
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   291
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   292
NW_TinyTree_createNode(NW_TinyTree_t* tree, 
hgs
parents:
diff changeset
   293
                       NW_TinyTree_Offset_t offset);
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
hgs
parents:
diff changeset
   296
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   297
    @function:    NW_TinyTree_setRoot
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
    @synopsis:    Create a root node.
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
    @scope:       public
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
    @parameters:
hgs
parents:
diff changeset
   304
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   305
                  The tiny tree.
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
       [in] NW_TinyTree_Offset_t offset
hgs
parents:
diff changeset
   308
                  Offset into buffer.
hgs
parents:
diff changeset
   309
hgs
parents:
diff changeset
   310
    @description: Create a root node which references the source buffer 
hgs
parents:
diff changeset
   311
                  at offset. Returns a pointer to the root node.
hgs
parents:
diff changeset
   312
hgs
parents:
diff changeset
   313
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   314
                  Pointer to the root node.
hgs
parents:
diff changeset
   315
hgs
parents:
diff changeset
   316
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   317
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   318
NW_TinyTree_setRoot(NW_TinyTree_t* tree, 
hgs
parents:
diff changeset
   319
                    NW_TinyTree_Offset_t offset);
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
hgs
parents:
diff changeset
   322
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   323
    @function:    NW_TinyTree_getRoot
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
    @synopsis:    Get the root node of the tree.
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
    @scope:       public
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
    @parameters:
hgs
parents:
diff changeset
   330
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   331
                  The tiny tree.
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
    @description: Get the root node of the tree.
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   336
                  The root node or NULL if it is not valid.
hgs
parents:
diff changeset
   337
hgs
parents:
diff changeset
   338
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   339
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   340
NW_TinyTree_getRoot(NW_TinyTree_t* tree);
hgs
parents:
diff changeset
   341
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   344
    @function:    NW_TinyTree_findNextSibling
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
    @synopsis:    Find the next sibling of a node.
hgs
parents:
diff changeset
   347
hgs
parents:
diff changeset
   348
    @scope:       public
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
    @parameters:
hgs
parents:
diff changeset
   351
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   352
                  The tiny tree.
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   355
                  The reference node.
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
    @description: Find the next sibling of a node.
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   360
                  The next sibling node or NULL if it is not valid.
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   363
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   364
NW_TinyTree_findNextSibling(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   368
    @function:    NW_TinyTree_findLastSibling
hgs
parents:
diff changeset
   369
hgs
parents:
diff changeset
   370
    @synopsis:    Find last sibling of a node.
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
    @scope:       public
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
    @parameters:
hgs
parents:
diff changeset
   375
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   376
                  The tiny tree.
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   379
                  The reference node.
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
    @description: Find last sibling of a node.
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   384
                  The last sibling node or NULL if it is not valid.
hgs
parents:
diff changeset
   385
hgs
parents:
diff changeset
   386
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   387
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   388
NW_TinyTree_findLastSibling(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   392
    @function:    NW_TinyTree_findPreviousSibling
hgs
parents:
diff changeset
   393
hgs
parents:
diff changeset
   394
    @synopsis:    Find the previous sibling of a node.
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
    @scope:       public
hgs
parents:
diff changeset
   397
hgs
parents:
diff changeset
   398
    @parameters:
hgs
parents:
diff changeset
   399
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   400
                  The tiny tree.
hgs
parents:
diff changeset
   401
hgs
parents:
diff changeset
   402
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   403
                  The reference node.
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
    @description: Find the previous sibling of a node.
hgs
parents:
diff changeset
   406
hgs
parents:
diff changeset
   407
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   408
                  The previous sibling node or NULL if it is not valid.
hgs
parents:
diff changeset
   409
hgs
parents:
diff changeset
   410
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   411
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   412
NW_TinyTree_findPreviousSibling(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
hgs
parents:
diff changeset
   415
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   416
    @function:    NW_TinyTree_findFirstChild
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
    @synopsis:    Find the first child of a node.
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
    @scope:       public
hgs
parents:
diff changeset
   421
hgs
parents:
diff changeset
   422
    @parameters:
hgs
parents:
diff changeset
   423
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   424
                  The tiny tree.
hgs
parents:
diff changeset
   425
hgs
parents:
diff changeset
   426
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   427
                  The reference node.
hgs
parents:
diff changeset
   428
hgs
parents:
diff changeset
   429
    @description: Find the first child of a node.
hgs
parents:
diff changeset
   430
hgs
parents:
diff changeset
   431
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   432
                  The first child node or NULL if it is not valid.
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   435
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   436
NW_TinyTree_findFirstChild(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   440
    @function:    NW_TinyTree_findLastChild
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
    @synopsis:    Find a node's last child.
hgs
parents:
diff changeset
   443
hgs
parents:
diff changeset
   444
    @scope:       public
hgs
parents:
diff changeset
   445
hgs
parents:
diff changeset
   446
    @parameters:
hgs
parents:
diff changeset
   447
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   448
                  The tiny tree.
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   451
                  The reference node.
hgs
parents:
diff changeset
   452
hgs
parents:
diff changeset
   453
    @description: Find a node's last child.
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   456
                  The last child node or NULL if it is not valid.
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   459
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   460
NW_TinyTree_findLastChild(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   461
hgs
parents:
diff changeset
   462
hgs
parents:
diff changeset
   463
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   464
    @function:    NW_TinyTree_findParent
hgs
parents:
diff changeset
   465
hgs
parents:
diff changeset
   466
    @synopsis:    Find a node's parent.
hgs
parents:
diff changeset
   467
hgs
parents:
diff changeset
   468
    @scope:       public
hgs
parents:
diff changeset
   469
hgs
parents:
diff changeset
   470
    @parameters:
hgs
parents:
diff changeset
   471
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   472
                  The tiny tree.
hgs
parents:
diff changeset
   473
hgs
parents:
diff changeset
   474
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   475
                  The reference node.
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
    @description: Find a node's parent.
hgs
parents:
diff changeset
   478
hgs
parents:
diff changeset
   479
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   480
                  The parent node of this node or NULL if it is not valid.
hgs
parents:
diff changeset
   481
hgs
parents:
diff changeset
   482
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   483
NW_TinyTree_Node_t* 
hgs
parents:
diff changeset
   484
NW_TinyTree_findParent(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   485
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   488
    @function:    NW_TinyTree_attachAfter
hgs
parents:
diff changeset
   489
hgs
parents:
diff changeset
   490
    @synopsis:    Attach a sibling after a node.
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
    @scope:       public
hgs
parents:
diff changeset
   493
hgs
parents:
diff changeset
   494
    @parameters:
hgs
parents:
diff changeset
   495
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   496
                  The tiny tree.
hgs
parents:
diff changeset
   497
hgs
parents:
diff changeset
   498
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   499
                  The reference node.
hgs
parents:
diff changeset
   500
hgs
parents:
diff changeset
   501
       [in] NW_TinyTree_Node_t* sibling
hgs
parents:
diff changeset
   502
                  Sibling node to attach.
hgs
parents:
diff changeset
   503
hgs
parents:
diff changeset
   504
    @description: Attach a sibling after a node.
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   507
                  Status of operation.
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   510
                  Always returns success.
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   513
NW_Status_t 
hgs
parents:
diff changeset
   514
NW_TinyTree_attachAfter(NW_TinyTree_Node_t* node, 
hgs
parents:
diff changeset
   515
                        NW_TinyTree_Node_t* sibling);
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
hgs
parents:
diff changeset
   518
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   519
    @function:    NW_TinyTree_attachBefore
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
    @synopsis:    Attach a sibling before another node.
hgs
parents:
diff changeset
   522
hgs
parents:
diff changeset
   523
    @scope:       public
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
    @parameters:
hgs
parents:
diff changeset
   526
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   527
                  The tiny tree.
hgs
parents:
diff changeset
   528
hgs
parents:
diff changeset
   529
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   530
                  The reference node.
hgs
parents:
diff changeset
   531
hgs
parents:
diff changeset
   532
       [in] NW_TinyTree_Node_t* sibling
hgs
parents:
diff changeset
   533
                  default
hgs
parents:
diff changeset
   534
hgs
parents:
diff changeset
   535
    @description: Attach a sibling before another node.
hgs
parents:
diff changeset
   536
hgs
parents:
diff changeset
   537
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   538
                  Status of operation.
hgs
parents:
diff changeset
   539
hgs
parents:
diff changeset
   540
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   541
                  Node attached.
hgs
parents:
diff changeset
   542
hgs
parents:
diff changeset
   543
       [NW_STAT_FAILURE]
hgs
parents:
diff changeset
   544
                  Could not attach node.
hgs
parents:
diff changeset
   545
hgs
parents:
diff changeset
   546
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   547
NW_Status_t 
hgs
parents:
diff changeset
   548
NW_TinyTree_attachBefore(NW_TinyTree_Node_t* node, 
hgs
parents:
diff changeset
   549
                         NW_TinyTree_Node_t* sibling);
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   553
    @function:    NW_TinyTree_attachChild
hgs
parents:
diff changeset
   554
hgs
parents:
diff changeset
   555
    @synopsis:    Attach a child to a node.
hgs
parents:
diff changeset
   556
hgs
parents:
diff changeset
   557
    @scope:       public
hgs
parents:
diff changeset
   558
hgs
parents:
diff changeset
   559
    @parameters:
hgs
parents:
diff changeset
   560
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   561
                  The tiny tree.
hgs
parents:
diff changeset
   562
hgs
parents:
diff changeset
   563
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   564
                  The reference node.
hgs
parents:
diff changeset
   565
hgs
parents:
diff changeset
   566
       [in] NW_TinyTree_Node_t* child
hgs
parents:
diff changeset
   567
                  The child to attach.
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
    @description: Attach a child to a node as last child.
hgs
parents:
diff changeset
   570
hgs
parents:
diff changeset
   571
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   572
                  Status of operation.
hgs
parents:
diff changeset
   573
hgs
parents:
diff changeset
   574
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   575
                  Node attached.
hgs
parents:
diff changeset
   576
hgs
parents:
diff changeset
   577
       [NW_STAT_FAILURE]
hgs
parents:
diff changeset
   578
                  Could not attach node.
hgs
parents:
diff changeset
   579
hgs
parents:
diff changeset
   580
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   581
NW_Status_t
hgs
parents:
diff changeset
   582
NW_TinyTree_attachChild(NW_TinyTree_Node_t* node, 
hgs
parents:
diff changeset
   583
                        NW_TinyTree_Node_t* child);
hgs
parents:
diff changeset
   584
hgs
parents:
diff changeset
   585
hgs
parents:
diff changeset
   586
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   587
    @function:    NW_TinyTree_deleteNode
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
    @synopsis:    Delete a node.
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
    @scope:       public
hgs
parents:
diff changeset
   592
hgs
parents:
diff changeset
   593
    @parameters:
hgs
parents:
diff changeset
   594
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   595
                  The tiny tree.
hgs
parents:
diff changeset
   596
hgs
parents:
diff changeset
   597
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   598
                  The node to delete.
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
    @description: Delete a node, deleting any subtree below the node as well.
hgs
parents:
diff changeset
   601
hgs
parents:
diff changeset
   602
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   603
                  Status of operation.
hgs
parents:
diff changeset
   604
hgs
parents:
diff changeset
   605
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   606
                  Always returns success.
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   609
NW_Status_t
hgs
parents:
diff changeset
   610
NW_TinyTree_deleteNode(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   611
hgs
parents:
diff changeset
   612
hgs
parents:
diff changeset
   613
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   614
    @function:    NW_TinyTree_setContext
hgs
parents:
diff changeset
   615
hgs
parents:
diff changeset
   616
    @synopsis:    Set context.
hgs
parents:
diff changeset
   617
hgs
parents:
diff changeset
   618
    @scope:       public
hgs
parents:
diff changeset
   619
hgs
parents:
diff changeset
   620
    @parameters:
hgs
parents:
diff changeset
   621
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   622
                  The tiny tree.
hgs
parents:
diff changeset
   623
hgs
parents:
diff changeset
   624
       [in] void* context
hgs
parents:
diff changeset
   625
                  Context to set.
hgs
parents:
diff changeset
   626
hgs
parents:
diff changeset
   627
    @description: Set context.
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   630
                  Status of operation.
hgs
parents:
diff changeset
   631
hgs
parents:
diff changeset
   632
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   633
                  Always returns success.
hgs
parents:
diff changeset
   634
hgs
parents:
diff changeset
   635
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   636
NW_Status_t
hgs
parents:
diff changeset
   637
NW_TinyTree_setContext(NW_TinyTree_t* tree, 
hgs
parents:
diff changeset
   638
                       void* context);
hgs
parents:
diff changeset
   639
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   642
    @function:    NW_TinyTree_getContext
hgs
parents:
diff changeset
   643
hgs
parents:
diff changeset
   644
    @synopsis:    Get context.
hgs
parents:
diff changeset
   645
hgs
parents:
diff changeset
   646
    @scope:       public
hgs
parents:
diff changeset
   647
hgs
parents:
diff changeset
   648
    @parameters:
hgs
parents:
diff changeset
   649
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   650
                  The tiny tree.
hgs
parents:
diff changeset
   651
hgs
parents:
diff changeset
   652
    @description: Get context.
hgs
parents:
diff changeset
   653
hgs
parents:
diff changeset
   654
    @returns:     void*
hgs
parents:
diff changeset
   655
                  The context.
hgs
parents:
diff changeset
   656
hgs
parents:
diff changeset
   657
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   658
void*
hgs
parents:
diff changeset
   659
NW_TinyTree_getContext(NW_TinyTree_t* tree);
hgs
parents:
diff changeset
   660
hgs
parents:
diff changeset
   661
hgs
parents:
diff changeset
   662
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   663
    @function:    NW_TinyTree_Node_getFlags
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
    @synopsis:    Get flags.
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
    @scope:       public
hgs
parents:
diff changeset
   668
hgs
parents:
diff changeset
   669
    @parameters:
hgs
parents:
diff changeset
   670
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   671
                  The tiny tree.
hgs
parents:
diff changeset
   672
hgs
parents:
diff changeset
   673
    @description: Get flags.
hgs
parents:
diff changeset
   674
hgs
parents:
diff changeset
   675
    @returns:     NW_Uint16
hgs
parents:
diff changeset
   676
                  The node flags.
hgs
parents:
diff changeset
   677
hgs
parents:
diff changeset
   678
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   679
NW_Uint16 
hgs
parents:
diff changeset
   680
NW_TinyTree_Node_getFlags(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   681
hgs
parents:
diff changeset
   682
hgs
parents:
diff changeset
   683
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   684
    @function:    NW_TinyTree_Node_setUserFlags
hgs
parents:
diff changeset
   685
hgs
parents:
diff changeset
   686
    @synopsis:    Set user flags.
hgs
parents:
diff changeset
   687
hgs
parents:
diff changeset
   688
    @scope:       public
hgs
parents:
diff changeset
   689
hgs
parents:
diff changeset
   690
    @parameters:
hgs
parents:
diff changeset
   691
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   692
                  The tiny tree.
hgs
parents:
diff changeset
   693
hgs
parents:
diff changeset
   694
       [in] NW_Uint16 flags
hgs
parents:
diff changeset
   695
                  The flags.
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
    @description: Set user flags.
hgs
parents:
diff changeset
   698
hgs
parents:
diff changeset
   699
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   700
                  Status of operation.
hgs
parents:
diff changeset
   701
hgs
parents:
diff changeset
   702
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   703
                  Always returns success.
hgs
parents:
diff changeset
   704
hgs
parents:
diff changeset
   705
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   706
NW_Status_t
hgs
parents:
diff changeset
   707
NW_TinyTree_Node_setUserFlags(NW_TinyTree_Node_t* node, 
hgs
parents:
diff changeset
   708
                              NW_Uint16 flags);
hgs
parents:
diff changeset
   709
hgs
parents:
diff changeset
   710
hgs
parents:
diff changeset
   711
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   712
    @function:    NW_TinyTree_Node_getSourceOffset
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
    @synopsis:    Get source offset.
hgs
parents:
diff changeset
   715
hgs
parents:
diff changeset
   716
    @scope:       public
hgs
parents:
diff changeset
   717
hgs
parents:
diff changeset
   718
    @parameters:
hgs
parents:
diff changeset
   719
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   720
                  The tiny tree.
hgs
parents:
diff changeset
   721
hgs
parents:
diff changeset
   722
    @description: Get source offset.
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
    @returns:     NW_TinyTree_Offset_t
hgs
parents:
diff changeset
   725
                  The offset.
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   728
NW_TinyTree_Offset_t
hgs
parents:
diff changeset
   729
NW_TinyTree_Node_getSourceOffset(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   730
hgs
parents:
diff changeset
   731
hgs
parents:
diff changeset
   732
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   733
    @function:    NW_TinyTree_Node_getSourceAddress
hgs
parents:
diff changeset
   734
hgs
parents:
diff changeset
   735
    @synopsis:    Get source address.
hgs
parents:
diff changeset
   736
hgs
parents:
diff changeset
   737
    @scope:       public
hgs
parents:
diff changeset
   738
hgs
parents:
diff changeset
   739
    @parameters:
hgs
parents:
diff changeset
   740
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   741
                  The tiny tree.
hgs
parents:
diff changeset
   742
hgs
parents:
diff changeset
   743
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   744
                  Reference node.
hgs
parents:
diff changeset
   745
    @description: Get source address.
hgs
parents:
diff changeset
   746
hgs
parents:
diff changeset
   747
    @returns:     void*
hgs
parents:
diff changeset
   748
                  The address.
hgs
parents:
diff changeset
   749
hgs
parents:
diff changeset
   750
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   751
void*
hgs
parents:
diff changeset
   752
NW_TinyTree_Node_getSourceAddress(NW_TinyTree_t* tree, 
hgs
parents:
diff changeset
   753
                                  NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   754
hgs
parents:
diff changeset
   755
hgs
parents:
diff changeset
   756
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   757
    @function:    NW_TinyTree_Node_GetSegmentAndOffset
hgs
parents:
diff changeset
   758
hgs
parents:
diff changeset
   759
    @synopsis:    Get segment and offset.
hgs
parents:
diff changeset
   760
hgs
parents:
diff changeset
   761
    @scope:       public
hgs
parents:
diff changeset
   762
hgs
parents:
diff changeset
   763
    @parameters:
hgs
parents:
diff changeset
   764
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   765
                  The tiny tree.
hgs
parents:
diff changeset
   766
hgs
parents:
diff changeset
   767
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   768
                  default
hgs
parents:
diff changeset
   769
hgs
parents:
diff changeset
   770
       [out] NW_Uint8** segment
hgs
parents:
diff changeset
   771
                  default
hgs
parents:
diff changeset
   772
hgs
parents:
diff changeset
   773
       [out] NW_Uint32* segSize
hgs
parents:
diff changeset
   774
                  default
hgs
parents:
diff changeset
   775
hgs
parents:
diff changeset
   776
       [out] NW_Uint32* offset
hgs
parents:
diff changeset
   777
                  default
hgs
parents:
diff changeset
   778
hgs
parents:
diff changeset
   779
    @description: Get segment and offset.
hgs
parents:
diff changeset
   780
hgs
parents:
diff changeset
   781
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   782
                  Status of operation.
hgs
parents:
diff changeset
   783
hgs
parents:
diff changeset
   784
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   785
                  Segment and offset returned.
hgs
parents:
diff changeset
   786
hgs
parents:
diff changeset
   787
       [NW_STAT_FAILURE]
hgs
parents:
diff changeset
   788
                  Could not get segment and offset.
hgs
parents:
diff changeset
   789
hgs
parents:
diff changeset
   790
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   791
NW_Status_t
hgs
parents:
diff changeset
   792
NW_TinyTree_Node_GetSegmentAndOffset(NW_TinyTree_t* tree,
hgs
parents:
diff changeset
   793
                                     NW_TinyTree_Node_t* node,
hgs
parents:
diff changeset
   794
                                     NW_Uint8** segment,
hgs
parents:
diff changeset
   795
                                     NW_Uint32* segSize,
hgs
parents:
diff changeset
   796
                                     NW_Uint32* offset);
hgs
parents:
diff changeset
   797
hgs
parents:
diff changeset
   798
hgs
parents:
diff changeset
   799
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   800
    @function:    NW_TinyTree_GetSourceOffset
hgs
parents:
diff changeset
   801
hgs
parents:
diff changeset
   802
    @synopsis:    Get source offset.
hgs
parents:
diff changeset
   803
hgs
parents:
diff changeset
   804
    @scope:       public
hgs
parents:
diff changeset
   805
hgs
parents:
diff changeset
   806
    @parameters:
hgs
parents:
diff changeset
   807
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   808
                  The tiny tree.
hgs
parents:
diff changeset
   809
hgs
parents:
diff changeset
   810
       [in] NW_Uint8* segmentAddr
hgs
parents:
diff changeset
   811
                  default
hgs
parents:
diff changeset
   812
hgs
parents:
diff changeset
   813
       [out] NW_Uint32 offset
hgs
parents:
diff changeset
   814
                  Offset.
hgs
parents:
diff changeset
   815
hgs
parents:
diff changeset
   816
       [out] CXML_Vector_Metric_t* index
hgs
parents:
diff changeset
   817
                  Index of segment.
hgs
parents:
diff changeset
   818
hgs
parents:
diff changeset
   819
    @description: Get source offset.
hgs
parents:
diff changeset
   820
hgs
parents:
diff changeset
   821
    @returns:     NW_Status_t
hgs
parents:
diff changeset
   822
                  Status of operation.
hgs
parents:
diff changeset
   823
hgs
parents:
diff changeset
   824
       [NW_STAT_SUCCESS]
hgs
parents:
diff changeset
   825
                  Offset returned.
hgs
parents:
diff changeset
   826
hgs
parents:
diff changeset
   827
       [NW_STAT_FAILURE]
hgs
parents:
diff changeset
   828
                  Could not get offset.
hgs
parents:
diff changeset
   829
hgs
parents:
diff changeset
   830
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   831
extern
hgs
parents:
diff changeset
   832
NW_Status_t
hgs
parents:
diff changeset
   833
NW_TinyTree_GetSourceOffset(NW_TinyTree_t* tree,
hgs
parents:
diff changeset
   834
                            NW_Uint8* segmentAddr,         
hgs
parents:
diff changeset
   835
                            NW_Uint32  offset,
hgs
parents:
diff changeset
   836
                            NW_Uint32* index);
hgs
parents:
diff changeset
   837
hgs
parents:
diff changeset
   838
hgs
parents:
diff changeset
   839
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   840
    @function:    NW_TinyTree_Node_findTree
hgs
parents:
diff changeset
   841
hgs
parents:
diff changeset
   842
    @synopsis:    Find tree.
hgs
parents:
diff changeset
   843
hgs
parents:
diff changeset
   844
    @scope:       public
hgs
parents:
diff changeset
   845
hgs
parents:
diff changeset
   846
    @parameters:
hgs
parents:
diff changeset
   847
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   848
                  The tree node.
hgs
parents:
diff changeset
   849
hgs
parents:
diff changeset
   850
    @description: Get a reference to the tree that owns a node. This is
hgs
parents:
diff changeset
   851
                  not likely to be a very efficient call since it can 
hgs
parents:
diff changeset
   852
                  only find the tree safely by doing a linear search for
hgs
parents:
diff changeset
   853
                  the sentinel tree node at the beginning of the current
hgs
parents:
diff changeset
   854
                  segment.
hgs
parents:
diff changeset
   855
hgs
parents:
diff changeset
   856
    @returns:     NW_TinyTree_t*
hgs
parents:
diff changeset
   857
                  Tiny tree or NULL if not found.
hgs
parents:
diff changeset
   858
hgs
parents:
diff changeset
   859
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   860
IMPORT_C NW_TinyTree_t*
hgs
parents:
diff changeset
   861
NW_TinyTree_Node_findTree(NW_TinyTree_Node_t* node);
hgs
parents:
diff changeset
   862
hgs
parents:
diff changeset
   863
hgs
parents:
diff changeset
   864
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   865
    @function:    NW_TinyTree_createChild
hgs
parents:
diff changeset
   866
hgs
parents:
diff changeset
   867
    @synopsis:    Create child node.
hgs
parents:
diff changeset
   868
hgs
parents:
diff changeset
   869
    @scope:       public
hgs
parents:
diff changeset
   870
hgs
parents:
diff changeset
   871
    @parameters:
hgs
parents:
diff changeset
   872
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   873
                  The tiny tree.
hgs
parents:
diff changeset
   874
hgs
parents:
diff changeset
   875
       [in] NW_TinyTree_Node_t* parent
hgs
parents:
diff changeset
   876
                  Parent of new child.
hgs
parents:
diff changeset
   877
hgs
parents:
diff changeset
   878
       [in] NW_TinyTree_Offset_t offset
hgs
parents:
diff changeset
   879
                  Offset.
hgs
parents:
diff changeset
   880
hgs
parents:
diff changeset
   881
    @description: Create a new node as a child of an existing node. The 
hgs
parents:
diff changeset
   882
                  child references the source buffer at offset. The new 
hgs
parents:
diff changeset
   883
                  child node is returned.  
hgs
parents:
diff changeset
   884
hgs
parents:
diff changeset
   885
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   886
                  The new chold node or NULL if not successful.
hgs
parents:
diff changeset
   887
hgs
parents:
diff changeset
   888
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   889
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   890
NW_TinyTree_createChild(NW_TinyTree_t* tree, 
hgs
parents:
diff changeset
   891
                        NW_TinyTree_Node_t* parent, 
hgs
parents:
diff changeset
   892
                        NW_TinyTree_Offset_t offset);
hgs
parents:
diff changeset
   893
hgs
parents:
diff changeset
   894
hgs
parents:
diff changeset
   895
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   896
    @function:    NW_TinyTree_createSibling
hgs
parents:
diff changeset
   897
hgs
parents:
diff changeset
   898
    @synopsis:    Create sibling node.
hgs
parents:
diff changeset
   899
hgs
parents:
diff changeset
   900
    @scope:       public
hgs
parents:
diff changeset
   901
hgs
parents:
diff changeset
   902
    @parameters:
hgs
parents:
diff changeset
   903
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   904
                  The tiny tree.
hgs
parents:
diff changeset
   905
hgs
parents:
diff changeset
   906
       [in] NW_TinyTree_Node_t* node
hgs
parents:
diff changeset
   907
                  Sibling of new node.
hgs
parents:
diff changeset
   908
hgs
parents:
diff changeset
   909
       [in] NW_TinyTree_Offset_t offset
hgs
parents:
diff changeset
   910
                  Offset.
hgs
parents:
diff changeset
   911
hgs
parents:
diff changeset
   912
    @description: Create a new node as an immediate sibling to an 
hgs
parents:
diff changeset
   913
                  existing node. The child references the source buffer
hgs
parents:
diff changeset
   914
                  at offset. The new child node is returned.  
hgs
parents:
diff changeset
   915
hgs
parents:
diff changeset
   916
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   917
                  New node or NULL if not successful.
hgs
parents:
diff changeset
   918
hgs
parents:
diff changeset
   919
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   920
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
   921
NW_TinyTree_createSibling(NW_TinyTree_t* tree, 
hgs
parents:
diff changeset
   922
                          NW_TinyTree_Node_t* node, 
hgs
parents:
diff changeset
   923
                          NW_TinyTree_Offset_t offset);
hgs
parents:
diff changeset
   924
hgs
parents:
diff changeset
   925
hgs
parents:
diff changeset
   926
  /* RME Documentation tools does not handle function call as parameter */
hgs
parents:
diff changeset
   927
/* * ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   928
    @function:    NW_TinyTree_recurse
hgs
parents:
diff changeset
   929
hgs
parents:
diff changeset
   930
    @synopsis:    Recurse through tree using callback.
hgs
parents:
diff changeset
   931
hgs
parents:
diff changeset
   932
    @scope:       public
hgs
parents:
diff changeset
   933
hgs
parents:
diff changeset
   934
    @parameters:
hgs
parents:
diff changeset
   935
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   936
                  The tiny tree.
hgs
parents:
diff changeset
   937
hgs
parents:
diff changeset
   938
       [in] NW_TinyTree_Node_t* start_node
hgs
parents:
diff changeset
   939
                  Node to start to recurse from.
hgs
parents:
diff changeset
   940
hgs
parents:
diff changeset
   941
       [in] void (*Node_CB) (NW_TinyTree_t*, NW_TinyTree_Node_t* , void*)
hgs
parents:
diff changeset
   942
                  Node handling calllback
hgs
parents:
diff changeset
   943
hgs
parents:
diff changeset
   944
       [in] void* context
hgs
parents:
diff changeset
   945
                  Parser context.
hgs
parents:
diff changeset
   946
hgs
parents:
diff changeset
   947
    @description: Recurse through tree calling the callback function 
hgs
parents:
diff changeset
   948
                  for each node.
hgs
parents:
diff changeset
   949
hgs
parents:
diff changeset
   950
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   951
void
hgs
parents:
diff changeset
   952
NW_TinyTree_recurse(NW_TinyTree_t* tree,
hgs
parents:
diff changeset
   953
                    NW_TinyTree_Node_t* start_node, 
hgs
parents:
diff changeset
   954
                    void (*Node_CB) (NW_TinyTree_t*, NW_TinyTree_Node_t* , void*),
hgs
parents:
diff changeset
   955
                    void* context);
hgs
parents:
diff changeset
   956
hgs
parents:
diff changeset
   957
hgs
parents:
diff changeset
   958
/* ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   959
   Node iterator functions. These iterate through nodes one at a time
hgs
parents:
diff changeset
   960
   returning NULL when there are no more nodes to iterate.  
hgs
parents:
diff changeset
   961
** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   962
  
hgs
parents:
diff changeset
   963
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   964
    @struct:      NW_TinyTree_NodeIterator
hgs
parents:
diff changeset
   965
hgs
parents:
diff changeset
   966
    @synopsis:    default
hgs
parents:
diff changeset
   967
hgs
parents:
diff changeset
   968
    @scope:       public
hgs
parents:
diff changeset
   969
    @variables:
hgs
parents:
diff changeset
   970
       NW_TinyTree_Node_t* start_node
hgs
parents:
diff changeset
   971
                  The start node.
hgs
parents:
diff changeset
   972
hgs
parents:
diff changeset
   973
       NW_TinyTree_Node_t* traversal_node
hgs
parents:
diff changeset
   974
                  Present node.
hgs
parents:
diff changeset
   975
hgs
parents:
diff changeset
   976
       NW_TinyTree_t* tree
hgs
parents:
diff changeset
   977
                  The tree.
hgs
parents:
diff changeset
   978
hgs
parents:
diff changeset
   979
    @description: Node iterator type definition.
hgs
parents:
diff changeset
   980
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
   981
typedef struct NW_TinyTree_NodeIterator_s{
hgs
parents:
diff changeset
   982
  NW_TinyTree_Node_t* start_node;
hgs
parents:
diff changeset
   983
  NW_TinyTree_Node_t* traversal_node;
hgs
parents:
diff changeset
   984
}NW_TinyTree_NodeIterator_t;
hgs
parents:
diff changeset
   985
hgs
parents:
diff changeset
   986
hgs
parents:
diff changeset
   987
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
   988
    @function:    NW_TinyTree_NodeIterator_init
hgs
parents:
diff changeset
   989
hgs
parents:
diff changeset
   990
    @synopsis:    Initialize a node iterator with a start node.
hgs
parents:
diff changeset
   991
hgs
parents:
diff changeset
   992
    @scope:       public
hgs
parents:
diff changeset
   993
hgs
parents:
diff changeset
   994
    @parameters:
hgs
parents:
diff changeset
   995
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
   996
                  The tiny tree.
hgs
parents:
diff changeset
   997
hgs
parents:
diff changeset
   998
       [in] NW_TinyTree_Node_t* start_node
hgs
parents:
diff changeset
   999
                  Iterator start point.
hgs
parents:
diff changeset
  1000
hgs
parents:
diff changeset
  1001
       [out] NW_TinyTree_NodeIterator_t* iterator
hgs
parents:
diff changeset
  1002
                  Iterator structure.
hgs
parents:
diff changeset
  1003
hgs
parents:
diff changeset
  1004
    @description: Initialize a node iterator with a start node. Iterate
hgs
parents:
diff changeset
  1005
                  through nodes one at a time returning NULL when there 
hgs
parents:
diff changeset
  1006
                  are no more nodes to iterate.  
hgs
parents:
diff changeset
  1007
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
  1008
void
hgs
parents:
diff changeset
  1009
NW_TinyTree_NodeIterator_init(NW_TinyTree_Node_t* start_node,
hgs
parents:
diff changeset
  1010
                              NW_TinyTree_NodeIterator_t* iterator);
hgs
parents:
diff changeset
  1011
hgs
parents:
diff changeset
  1012
hgs
parents:
diff changeset
  1013
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
  1014
    @function:    NW_TinyTree_NodeIterator_iterate
hgs
parents:
diff changeset
  1015
hgs
parents:
diff changeset
  1016
    @synopsis:    Iterate through a subtree.
hgs
parents:
diff changeset
  1017
hgs
parents:
diff changeset
  1018
    @scope:       public
hgs
parents:
diff changeset
  1019
hgs
parents:
diff changeset
  1020
    @parameters:
hgs
parents:
diff changeset
  1021
       [in-out] NW_TinyTree_NodeIterator_t* iterator
hgs
parents:
diff changeset
  1022
                  The iterator.
hgs
parents:
diff changeset
  1023
hgs
parents:
diff changeset
  1024
    @description: Iterate through a subtree returning each node exactly
hgs
parents:
diff changeset
  1025
                  once. The algorithm follows the toplogical ordering of
hgs
parents:
diff changeset
  1026
                  the tree (if there is an edge from v0 to v1, always 
hgs
parents:
diff changeset
  1027
                  visit v0 before v1). It's equivalent to solving a 
hgs
parents:
diff changeset
  1028
                  labyrinth by keeping your right hand on the wall!
hgs
parents:
diff changeset
  1029
hgs
parents:
diff changeset
  1030
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
  1031
                  Next node in iteration or NULL if done.
hgs
parents:
diff changeset
  1032
hgs
parents:
diff changeset
  1033
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
  1034
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
  1035
NW_TinyTree_NodeIterator_iterate(NW_TinyTree_NodeIterator_t* iterator);
hgs
parents:
diff changeset
  1036
hgs
parents:
diff changeset
  1037
hgs
parents:
diff changeset
  1038
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
  1039
    @function:    NW_TinyTree_NodeIterator_iterateSiblings
hgs
parents:
diff changeset
  1040
hgs
parents:
diff changeset
  1041
    @synopsis:    Iterate through the siblings of a node.
hgs
parents:
diff changeset
  1042
hgs
parents:
diff changeset
  1043
    @scope:       public
hgs
parents:
diff changeset
  1044
hgs
parents:
diff changeset
  1045
    @parameters:
hgs
parents:
diff changeset
  1046
       [in-out] NW_TinyTree_NodeIterator_t* iterator
hgs
parents:
diff changeset
  1047
                  The iterator.
hgs
parents:
diff changeset
  1048
hgs
parents:
diff changeset
  1049
    @description: Iterate through the siblings of a node.
hgs
parents:
diff changeset
  1050
hgs
parents:
diff changeset
  1051
    @returns:     NW_TinyTree_Node_t*
hgs
parents:
diff changeset
  1052
                  Next node in iteration or NULL if done.
hgs
parents:
diff changeset
  1053
hgs
parents:
diff changeset
  1054
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
  1055
NW_TinyTree_Node_t*
hgs
parents:
diff changeset
  1056
NW_TinyTree_NodeIterator_iterateSiblings(NW_TinyTree_NodeIterator_t* iterator);
hgs
parents:
diff changeset
  1057
hgs
parents:
diff changeset
  1058
hgs
parents:
diff changeset
  1059
/** ----------------------------------------------------------------------- **
hgs
parents:
diff changeset
  1060
    @function:    NW_TinyTree_GetWritableBlock
hgs
parents:
diff changeset
  1061
hgs
parents:
diff changeset
  1062
    @synopsis:    Get writable block.
hgs
parents:
diff changeset
  1063
hgs
parents:
diff changeset
  1064
    @scope:       public
hgs
parents:
diff changeset
  1065
hgs
parents:
diff changeset
  1066
    @parameters:
hgs
parents:
diff changeset
  1067
       [in] NW_TinyTree_t* tree
hgs
parents:
diff changeset
  1068
                  The tiny tree.
hgs
parents:
diff changeset
  1069
hgs
parents:
diff changeset
  1070
       [in] CXML_Vector_Metric_t size
hgs
parents:
diff changeset
  1071
                  Requested size.
hgs
parents:
diff changeset
  1072
hgs
parents:
diff changeset
  1073
       [in] CXML_Vector_Metric_t* source_offset
hgs
parents:
diff changeset
  1074
                  Offset.
hgs
parents:
diff changeset
  1075
hgs
parents:
diff changeset
  1076
    @description: Get writable block.
hgs
parents:
diff changeset
  1077
hgs
parents:
diff changeset
  1078
    @returns:     NW_Uint8*
hgs
parents:
diff changeset
  1079
                  Writable block.
hgs
parents:
diff changeset
  1080
hgs
parents:
diff changeset
  1081
 ** ----------------------------------------------------------------------- **/
hgs
parents:
diff changeset
  1082
NW_Uint8*
hgs
parents:
diff changeset
  1083
NW_TinyTree_GetWritableBlock(NW_TinyTree_t* tree,
hgs
parents:
diff changeset
  1084
                             NW_Uint32  size,
hgs
parents:
diff changeset
  1085
                             NW_Uint32 *source_offset);
hgs
parents:
diff changeset
  1086
hgs
parents:
diff changeset
  1087
hgs
parents:
diff changeset
  1088
#ifdef __cplusplus
hgs
parents:
diff changeset
  1089
} /* extern "C" { */
hgs
parents:
diff changeset
  1090
#endif /* __cplusplus */
hgs
parents:
diff changeset
  1091
hgs
parents:
diff changeset
  1092
#endif  /* NW_TINY_TREE_H */