ftp.nice.ch/pub/next/connectivity/news/NewsBase.3.02.s.tar.gz#/NewsBase302.source/NNTP/ITreeNodeD.h

This is ITreeNodeD.h in view mode; [Download] [Up]

/*
 Each node in the tree is named with a string.  No two child nodes of 
 the same parent node may have the same name.  Hence each node in the tree is
 uniquely addressed by a key, where a key is a list of strings. Let us call the
 nth string of a key the nth subkey.  Then the nth subkey specifies the name
 of a node at the nth level of a tree. The key then specifies a path through
 the tree from the root.  The child nodes of a parent node is stored in an
 lexigraphically ordered lists.  Additionally, each node in the tree may hold
 a link to another object.  Since each subtree is also a tree the methods may
 be called with any node as the root.
 */

#import <objc/Object.h>
#import "IOrderedListD.h"

#define MAX_TREE_STATE_DEPTH 1024
typedef struct {int depth; struct {id node; int index;}nodeState[MAX_TREE_STATE_DEPTH];} NXTreeState;

#define SEARCH 1
#define ADD 2

#define MAX_NO_OF_TOKENS	256
void makeTreeKey(const char *, const char **, const char *);

@interface ITreeNodeD:IOrderedListD {
}

/*
    addNodeForKey adds the node for key theKey and any required ancestral nodes.
    The id of the created node is returned.
*/
- addNodeForKey:(char **)theKey;

/*
    nodeForKey returns the id of the addressed node.
*/
- (ITreeNodeD *)nodeForKey:(char **)theKey;

//- leaf;
//- (void)setLeaf:leaf;

//- link;
//- (void)setLink:link;

/*
    searchForNodeWithKey will return the id of the node with key TheKey.  If the
    node doesn't exists and the opCode is ADD then that node and any ancestral
    nodes are add to the tree.  If the opCode is SEARCH and the node doesn't
    exists then nil is returned.  If theLeaf is not nil and the node exists or
    is created then that node is linked to the leaf.
*/

- searchForNodeWithKey:(char **)theKey withOption:(int)opCode;

/*
     traverseTreeAndPerform: target: traverses the tree and makes target
     perform the given method 
*/
- (void)traverseTreeAndPerform:(SEL)theSelector target:target;

- (void)initState:(NXTreeState *)state;
- nextState:(NXTreeState *)state;

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.