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 >
Text File  |  1994-05-25  |  6KB  |  265 lines

  1. |##########|
  2. |#MAGIC   #|CLABLLAP
  3. |#PROJECT #|"ImportHelp"
  4. |#PATHS   #|"StdProject"
  5. |#FLAGS   #|xx---x-xx---x-x-----------------
  6. |#USERSW  #|--------------------------------
  7. |#USERMASK#|--------------------------------
  8. |#SWITCHES#|xx---xxxxx------
  9. |##########|
  10. DEFINITION MODULE Trees;
  11.  
  12. FROM Lists      IMPORT FileTypeMismatch;
  13. FROM FileSystem IMPORT File;
  14.  
  15. IMPORT Lists;
  16.  
  17. EXCEPTION
  18.   NoFather   : "Leaf has no father";
  19.  
  20.   DEFINITION MODULE StdTrees(Tree : POINTER TO Leaf);
  21.  
  22.     DEFINITION MODULE LeafList = Lists.BiLists(Tree);
  23.  
  24.     TYPE
  25.       Leaf       = RECORD OF LeafList.BiNode
  26.              father : Tree;
  27.              sons   : LeafList.BiList
  28.            END;
  29.  
  30.       Check      = PROCEDURE(t : Tree):BOOLEAN;
  31.       Destructor = PROCEDURE(t : Tree);
  32.       ApplyProc  = PROCEDURE(t : Tree);
  33.       SaveProc   = PROCEDURE(f : File;leaf : Tree);
  34.       LoadProc   = PROCEDURE(f : File):Tree;
  35.  
  36.     PROCEDURE Init(t : Tree);
  37.  
  38.  
  39.     PROCEDURE AddFirstSon(father,son : Tree);
  40.  
  41.     PROCEDURE AddLastSon(father,son : Tree);
  42.  
  43.     PROCEDURE AddNextBrother(tree,brother : Tree);
  44.  
  45.     PROCEDURE AddPrevBrother(tree,brother : Tree);
  46.  
  47.  
  48.     PROCEDURE Remove(tree : Tree);
  49.  
  50.     PROCEDURE RemoveSons(father : Tree);
  51.  
  52.     PROCEDURE RemoveSons_IF(tree : Tree;if : Check);
  53.  
  54.     PROCEDURE Remove_IF(tree : Tree;if : Check);
  55.  
  56.  
  57.     PROCEDURE Delete(VAR tree : Tree);
  58.  
  59.     PROCEDURE DeleteSons(father : Tree);
  60.  
  61.     PROCEDURE DeleteSons_IF(tree : Tree;if : Check);
  62.  
  63.     PROCEDURE Delete_IF(VAR tree : Tree;if : Check);
  64.  
  65.  
  66.     PROCEDURE Destruct(VAR tree : Tree;des : Destructor);
  67.  
  68.     PROCEDURE DestructSons(father : Tree;des : Destructor);
  69.  
  70.     PROCEDURE DestructSons_IF(tree : Tree;
  71.                   if   : Check;
  72.                   des : Destructor);
  73.  
  74.     PROCEDURE Destruct_IF(VAR tree : Tree;
  75.                   if   : Check;
  76.                   des  : Destructor);
  77.  
  78.  
  79.     PROCEDURE ApplyDepthFirst(tree : Tree;
  80.                   work : ApplyProc);
  81.  
  82.     PROCEDURE ApplyBreadthFirst(tree : Tree;
  83.                 work : ApplyProc);
  84.  
  85.     PROCEDURE ApplyDepthFirstBig(tree     : Tree;
  86.                  pre,
  87.                  between,
  88.                  post     : ApplyProc);
  89.  
  90.  
  91.     PROCEDURE FindDepthFirst(tree   : Tree;
  92.                  equal  : Check):Tree;
  93.  
  94.     PROCEDURE FindBreadthFirst(tree  : Tree;
  95.                    equal : Check):Tree;
  96.  
  97.  
  98.     PROCEDURE FindSon(father : Tree;
  99.                equal : Check):Tree;
  100.  
  101.     PROCEDURE FindNextSon(father : Tree;
  102.                equal : Check;
  103.                son   : Tree):Tree;
  104.  
  105.  
  106.     PROCEDURE Save(tree : Tree;
  107.            f    : File;
  108.            part : SaveProc);
  109.  
  110.     PROCEDURE Load(VAR tree : Tree;
  111.                f    : File;
  112.                part : LoadProc);
  113.  
  114.   END StdTrees;
  115.  
  116.  
  117.   DEFINITION MODULE CursorTree(type : ANYPTR);
  118.  
  119.     EXCEPTION
  120.       NoCursor : "No cursor set";
  121.  
  122.     TYPE
  123.       LeafPtr = POINTER TO Leaf;
  124.  
  125.     DEFINITION MODULE CTree = StdTrees(LeafPtr);
  126.  
  127.     TYPE
  128.       Leaf    = RECORD OF CTree.Leaf
  129.           data : type;
  130.         END;
  131.       Tree    = RECORD
  132.           root,
  133.           mark,
  134.           cursor : LeafPtr;
  135.         END;
  136.  
  137.       Check      = PROCEDURE(t : type):BOOLEAN;
  138.       Destructor = PROCEDURE(t : type);
  139.       ApplyProc  = PROCEDURE(t : type);
  140.       SaveProc  = PROCEDURE(f : File;leaf : type);
  141.       LoadProc   = PROCEDURE(f : File):type;
  142.  
  143.  
  144.     PROCEDURE Init(VAR tree : Tree);
  145.  
  146.  
  147.     PROCEDURE Get(VAR tree : Tree):type;
  148.  
  149.     PROCEDURE GetSubtree(VAR dest,arg : Tree);
  150.  
  151.  
  152.     PROCEDURE AddFirstSon(VAR tree : Tree;son : type);
  153.  
  154.     PROCEDURE AddLastSon(VAR tree : Tree;son : type);
  155.  
  156.     PROCEDURE AddNextBrother(VAR tree : Tree;brother : type);
  157.  
  158.     PROCEDURE AddPrevBrother(VAR tree : Tree;brother : type);
  159.  
  160.  
  161.     PROCEDURE AddFirstSonSubtree(VAR tree,son : Tree);
  162.  
  163.     PROCEDURE AddLastSonSubtree(VAR tree,son : Tree);
  164.  
  165.     PROCEDURE AddNextBrotherSubtree(VAR tree,brother : Tree);
  166.  
  167.     PROCEDURE AddPrevBrotherSubtree(VAR tree,brother : Tree);
  168.  
  169.  
  170.     PROCEDURE Remove(VAR tree : Tree);
  171.  
  172.     PROCEDURE RemoveSons(VAR tree : Tree);
  173.  
  174.     PROCEDURE RemoveSons_IF(VAR tree : Tree;if : Check);
  175.  
  176.     PROCEDURE Remove_IF(VAR tree : Tree;if : Check);
  177.  
  178.  
  179.     PROCEDURE Delete(VAR tree : Tree);
  180.  
  181.     PROCEDURE DeleteSons(VAR tree : Tree);
  182.  
  183.     PROCEDURE DeleteSons_IF(VAR tree : Tree;if : Check);
  184.  
  185.     PROCEDURE Delete_IF(VAR tree : Tree;if : Check);
  186.  
  187.  
  188.     PROCEDURE Destruct(VAR tree : Tree;des : Destructor);
  189.  
  190.     PROCEDURE DestructSons(VAR tree : Tree;des : Destructor);
  191.  
  192.     PROCEDURE DestructSons_IF(VAR tree : Tree;
  193.                   if   : Check;
  194.                   des  : Destructor);
  195.  
  196.     PROCEDURE Destruct_IF(VAR tree : Tree;
  197.                   if   : Check;
  198.                   des  : Destructor);
  199.  
  200.  
  201.     PROCEDURE ApplyDepthFirst(VAR tree : Tree;
  202.                   work : ApplyProc);
  203.  
  204.     PROCEDURE ApplyBreadthFirst(VAR tree : Tree;
  205.                     work : ApplyProc);
  206.  
  207.     PROCEDURE ApplyDepthFirstBig(VAR tree     : Tree;
  208.                      pre,
  209.                      between,
  210.                      post     : ApplyProc);
  211.  
  212.  
  213.     PROCEDURE Dup(VAR dest,arg : Tree);
  214.  
  215.     PROCEDURE DupSubtree(VAR dest,arg : Tree);
  216.  
  217.  
  218.     PROCEDURE Mark(VAR tree : Tree);
  219.  
  220.     PROCEDURE GoMark(VAR tree : Tree);
  221.  
  222.  
  223.     PROCEDURE FindDepthFirst(VAR tree  : Tree;
  224.                  equal : Check);
  225.  
  226.     PROCEDURE FindBreadthFirst(VAR tree   : Tree;
  227.                    equal  : Check);
  228.  
  229.  
  230.     PROCEDURE FindSon(VAR tree  : Tree;
  231.               equal : Check);
  232.  
  233.     PROCEDURE FindNextSon(VAR tree  : Tree;
  234.                   equal : Check);
  235.  
  236.  
  237.     PROCEDURE Father(VAR tree : Tree);
  238.  
  239.     PROCEDURE FirstSon(VAR tree : Tree);
  240.  
  241.     PROCEDURE LastSon(VAR tree : Tree);
  242.  
  243.     PROCEDURE NextBrother(VAR tree : Tree);
  244.  
  245.     PROCEDURE PrevBrother(VAR tree : Tree);
  246.  
  247.     PROCEDURE Root(VAR tree : Tree);
  248.  
  249.  
  250.     PROCEDURE HasCursor(VAR tree : Tree):BOOLEAN;
  251.  
  252.  
  253.     PROCEDURE Save(VAR tree : Tree;
  254.                f    : File;
  255.                part : SaveProc);
  256.  
  257.     PROCEDURE Load(VAR tree : Tree;
  258.                f    : File;
  259.                part : LoadProc);
  260.  
  261.   END CursorTree;
  262.  
  263. END Trees.
  264.  
  265.