home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Global Amiga Experience
/
globalamigaexperience.iso
/
compressed
/
development
/
clusterdemo.dms
/
clusterdemo.adf
/
Modules.lha
/
modules
/
txt
/
Trees.def
< prev
next >
Wrap
Text File
|
1994-05-25
|
6KB
|
265 lines
|##########|
|#MAGIC #|CLABLLAP
|#PROJECT #|"ImportHelp"
|#PATHS #|"StdProject"
|#FLAGS #|xx---x-xx---x-x-----------------
|#USERSW #|--------------------------------
|#USERMASK#|--------------------------------
|#SWITCHES#|xx---xxxxx------
|##########|
DEFINITION MODULE Trees;
FROM Lists IMPORT FileTypeMismatch;
FROM FileSystem IMPORT File;
IMPORT Lists;
EXCEPTION
NoFather : "Leaf has no father";
DEFINITION MODULE StdTrees(Tree : POINTER TO Leaf);
DEFINITION MODULE LeafList = Lists.BiLists(Tree);
TYPE
Leaf = RECORD OF LeafList.BiNode
father : Tree;
sons : LeafList.BiList
END;
Check = PROCEDURE(t : Tree):BOOLEAN;
Destructor = PROCEDURE(t : Tree);
ApplyProc = PROCEDURE(t : Tree);
SaveProc = PROCEDURE(f : File;leaf : Tree);
LoadProc = PROCEDURE(f : File):Tree;
PROCEDURE Init(t : Tree);
PROCEDURE AddFirstSon(father,son : Tree);
PROCEDURE AddLastSon(father,son : Tree);
PROCEDURE AddNextBrother(tree,brother : Tree);
PROCEDURE AddPrevBrother(tree,brother : Tree);
PROCEDURE Remove(tree : Tree);
PROCEDURE RemoveSons(father : Tree);
PROCEDURE RemoveSons_IF(tree : Tree;if : Check);
PROCEDURE Remove_IF(tree : Tree;if : Check);
PROCEDURE Delete(VAR tree : Tree);
PROCEDURE DeleteSons(father : Tree);
PROCEDURE DeleteSons_IF(tree : Tree;if : Check);
PROCEDURE Delete_IF(VAR tree : Tree;if : Check);
PROCEDURE Destruct(VAR tree : Tree;des : Destructor);
PROCEDURE DestructSons(father : Tree;des : Destructor);
PROCEDURE DestructSons_IF(tree : Tree;
if : Check;
des : Destructor);
PROCEDURE Destruct_IF(VAR tree : Tree;
if : Check;
des : Destructor);
PROCEDURE ApplyDepthFirst(tree : Tree;
work : ApplyProc);
PROCEDURE ApplyBreadthFirst(tree : Tree;
work : ApplyProc);
PROCEDURE ApplyDepthFirstBig(tree : Tree;
pre,
between,
post : ApplyProc);
PROCEDURE FindDepthFirst(tree : Tree;
equal : Check):Tree;
PROCEDURE FindBreadthFirst(tree : Tree;
equal : Check):Tree;
PROCEDURE FindSon(father : Tree;
equal : Check):Tree;
PROCEDURE FindNextSon(father : Tree;
equal : Check;
son : Tree):Tree;
PROCEDURE Save(tree : Tree;
f : File;
part : SaveProc);
PROCEDURE Load(VAR tree : Tree;
f : File;
part : LoadProc);
END StdTrees;
DEFINITION MODULE CursorTree(type : ANYPTR);
EXCEPTION
NoCursor : "No cursor set";
TYPE
LeafPtr = POINTER TO Leaf;
DEFINITION MODULE CTree = StdTrees(LeafPtr);
TYPE
Leaf = RECORD OF CTree.Leaf
data : type;
END;
Tree = RECORD
root,
mark,
cursor : LeafPtr;
END;
Check = PROCEDURE(t : type):BOOLEAN;
Destructor = PROCEDURE(t : type);
ApplyProc = PROCEDURE(t : type);
SaveProc = PROCEDURE(f : File;leaf : type);
LoadProc = PROCEDURE(f : File):type;
PROCEDURE Init(VAR tree : Tree);
PROCEDURE Get(VAR tree : Tree):type;
PROCEDURE GetSubtree(VAR dest,arg : Tree);
PROCEDURE AddFirstSon(VAR tree : Tree;son : type);
PROCEDURE AddLastSon(VAR tree : Tree;son : type);
PROCEDURE AddNextBrother(VAR tree : Tree;brother : type);
PROCEDURE AddPrevBrother(VAR tree : Tree;brother : type);
PROCEDURE AddFirstSonSubtree(VAR tree,son : Tree);
PROCEDURE AddLastSonSubtree(VAR tree,son : Tree);
PROCEDURE AddNextBrotherSubtree(VAR tree,brother : Tree);
PROCEDURE AddPrevBrotherSubtree(VAR tree,brother : Tree);
PROCEDURE Remove(VAR tree : Tree);
PROCEDURE RemoveSons(VAR tree : Tree);
PROCEDURE RemoveSons_IF(VAR tree : Tree;if : Check);
PROCEDURE Remove_IF(VAR tree : Tree;if : Check);
PROCEDURE Delete(VAR tree : Tree);
PROCEDURE DeleteSons(VAR tree : Tree);
PROCEDURE DeleteSons_IF(VAR tree : Tree;if : Check);
PROCEDURE Delete_IF(VAR tree : Tree;if : Check);
PROCEDURE Destruct(VAR tree : Tree;des : Destructor);
PROCEDURE DestructSons(VAR tree : Tree;des : Destructor);
PROCEDURE DestructSons_IF(VAR tree : Tree;
if : Check;
des : Destructor);
PROCEDURE Destruct_IF(VAR tree : Tree;
if : Check;
des : Destructor);
PROCEDURE ApplyDepthFirst(VAR tree : Tree;
work : ApplyProc);
PROCEDURE ApplyBreadthFirst(VAR tree : Tree;
work : ApplyProc);
PROCEDURE ApplyDepthFirstBig(VAR tree : Tree;
pre,
between,
post : ApplyProc);
PROCEDURE Dup(VAR dest,arg : Tree);
PROCEDURE DupSubtree(VAR dest,arg : Tree);
PROCEDURE Mark(VAR tree : Tree);
PROCEDURE GoMark(VAR tree : Tree);
PROCEDURE FindDepthFirst(VAR tree : Tree;
equal : Check);
PROCEDURE FindBreadthFirst(VAR tree : Tree;
equal : Check);
PROCEDURE FindSon(VAR tree : Tree;
equal : Check);
PROCEDURE FindNextSon(VAR tree : Tree;
equal : Check);
PROCEDURE Father(VAR tree : Tree);
PROCEDURE FirstSon(VAR tree : Tree);
PROCEDURE LastSon(VAR tree : Tree);
PROCEDURE NextBrother(VAR tree : Tree);
PROCEDURE PrevBrother(VAR tree : Tree);
PROCEDURE Root(VAR tree : Tree);
PROCEDURE HasCursor(VAR tree : Tree):BOOLEAN;
PROCEDURE Save(VAR tree : Tree;
f : File;
part : SaveProc);
PROCEDURE Load(VAR tree : Tree;
f : File;
part : LoadProc);
END CursorTree;
END Trees.