Release 1.0  Copyright ©1993, 1994, 1996 by Don Yacktman.  All Rights Reserved.





MiscTree




Inherits From: Object
Declared In: misckit/MiscTree.h



Class Description

The MiscTree implements a tree data structure.  Each MiscTree contains a List object which points to the branch objects, which should be other MiscTree objects.  You can create a new node for the tree using -alloc and -init and you can assign a label to the node when you initialize it with the -initLabel: and -initLabelString: methods.  To add a branch object, simply use the -addbranch: method.  If you need to manipulate the branches in some way, you can obtain the List object containing the branches via the -branches method.  The -depth and -width methods return the depth and width of the tree below the messaged node.

Each node in the tree can have a label and a value, both of which are arbitrary character strings.  You can set and retrieve the character strings with the -label, -value, -setLabel:, and -setValue: methods.

The tree may be dumped to an NXStream, with all its branches, by using the -dumpTree:level:indent method.  You can avoid having the branches below a MiscTree node printed when dumping the tree by collapsing the node.  Use -collapse to collapse the node and -uncollapse to uncollapse it.  The -collapsed method will tell you if a particular node is collapsed.  If you wish to exert more specific control over whether or not a node will be dumped, you can override the -moreData:level:indent: method to add the required functionality.  Overriding this method also allows you to add extra text to a node's line when a node is being dumped.

Note that this documentation is incomplete.  It will be finished soon.



Method Types

Initializing the MiscTree - init
- initLabel:
- initLabelString:
Dealing with branches - addBranch:
- branches
- depth
- width
Labels and node values - label
- setLabel:
- setValue:
- value
Printing - collapse
- collapsed
- dumpTree:level:indent:
- moreData:level:indent:
- uncollapse



Instance Methods

addBranch:
- addBranch:child

Adds the MiscTree node child to the end of the "branches" List object.  Returns self.

See also:  -branches




branches

- branches

Returns a List object containing all of the "children" of this MiscTree node.

See also:  -addBranch:



collapse

- collapse

This method is used to avoid having the branches below a MiscTree node printed when dumping the tree by collapsing the node.  Returns self.

See also:  -collapsed and -uncollapse



collapsed

- (BOOL)collapsed

This methods returns YES if the MiscTree node is collapsed.

See also:  -collapse and -uncollapse




depth

- (int)depth

Returns the depth of the MiscTree.  Depth means the longest distance from the receiver to the farthest leaf node.

See also:  -width




dumpTree:level:indent:

- dumpTree:(NXStream *)file level:(int)lev indent:(const char *)ind

Dumps the MiscTree to an NXStream.  This method should be sent to the top level of the tree with lev set to zero and ind being a string used for indenting.  Returns self.





free

- free

Frees the children beneath the MiscTree node sent to.  Returns self.

See also:  -initLabel: and -initLabelString:



init

- init

Initializes a new MiscTree node with an empty label.  Returns self.

See also:  -initLabel: and -initLabelString:




initLabel:

- initLabel:(const char *)newLabel

Initializes a new MiscTree node with a label of newLabel.  Returns self.

See also:  -init and -initLabelString::




initLabelString:

- initLabelString:(MiscString *)newLabel

Initializes a new MiscTree node with a the value of the MiscString object newLabel.  Returns self.

See also:  -initLabel: and -init




label

- (const char *)label
Returns the a string containing the label.

See also:  -setLabel:




moreData:level:indent:

- (BOOL)moreData:(NXStream *)file level:(int)lev indent:(const char *)ind

This method is up to the subclass to define. You can dynamically control collapsing (for example, cut off at a certain level, etc.) and also add info to the end of a dumped node's line from here. Be sure to message super when you override this method; if the superclass method returns a NO then you should return a NO, regardless. Don't just use the notCollapsed instance variable, since it may change in the future; look at the return value from super!

Here is an example of how you might override to keep from printing levels deeper than level 2 (remember that the root level is zero):

- (BOOL)moreData:(NXStream *)file level:(int)level indent:(const char *)indent
{
if ((level > 2) || ![super moreData:file level:level indent:indent]) {
return NO;
}
return YES;
}

By default returns ![self collapased].

See also:  -dumpTree:level:indent:




setLabel:

- setLabel:(const char *)newLabel

Sets the value of the label of the MiscTree node to newLabel.  Returns self.

See also:  -label




setValue:

- setValue:(MiscString *)newValue

Sets the value held by the MiscTree node to newValue.  Frees the current value.  (Maybe this should return the old value instead of returning self?) Returns self.

See also:  -value




uncollapse

- uncollapse

Does the opposite of -collapse.  Returns self.

See also:  -collapse and -collapsed




value

- (const char *)value

Returns a pointer to the string holding the value of the MiscTree node.

See also:  -setValue:

width

- (int)width

Returns the total width of the MiscTree node and it's children.  Width means the total number of leaf nodes.

See also:  -depth