home *** CD-ROM | disk | FTP | other *** search
/ Global Amiga Experience / globalamigaexperience.iso / compressed / development / clusterdemo.dms / clusterdemo.adf / Modules.lha / modules / txt / Graphs.def < prev    next >
Text File  |  1994-05-25  |  4KB  |  123 lines

  1. |##########|
  2. |#MAGIC   #|CLABLMFI
  3. |#PROJECT #|"ImportHelp"
  4. |#PATHS   #|"StdProject"
  5. |#FLAGS   #|xx---x--x-----x-----------------
  6. |#USERSW  #|--------------------------------
  7. |#USERMASK#|--------------------------------
  8. |#SWITCHES#|xx---xxxxx------
  9. |##########|
  10. DEFINITION MODULE Graphs;
  11.  
  12. IMPORT Lists;
  13.  
  14. EXCEPTION
  15.   CircleFound : "Circle in graph detected";
  16.  
  17.  
  18.   DEFINITION MODULE DirectedGraphs(NodePtr : POINTER TO Node;
  19.                                    EdgePtr : POINTER TO Edge);
  20.  
  21.     DEFINITION MODULE NodeLists = Lists.BiLists(NodePtr);
  22.  
  23.     TYPE
  24.       Edge     = RECORD
  25.                    from,
  26.                    to    : RECORD
  27.                              prev,
  28.                              next  : EdgePtr;
  29.                              with  : NodePtr
  30.                            END;
  31.                  END;
  32.       Node     = RECORD OF NodeLists.BiNode;
  33.                    from,
  34.                    to    : RECORD
  35.                              first,
  36.                              last   : EdgePtr;
  37.                            END;
  38.                    mark  : BOOLEAN;
  39.                  END;
  40.       Graph    = RECORD
  41.                    nodes : NodeLists.BiList;
  42.                  END;
  43.  
  44.       ApplyN   = PROCEDURE(n : NodePtr);
  45.       ApplyE   = PROCEDURE(e : EdgePtr);
  46.       DestructN= PROCEDURE(n : NodePtr);
  47.       DestructE= PROCEDURE(e : EdgePtr);
  48.  
  49.     PROCEDURE Init(VAR graph : Graph);
  50.  
  51.     PROCEDURE RemoveAll(VAR graph : Graph);
  52.  
  53.     PROCEDURE DeleteAll(VAR graph : Graph);
  54.  
  55.     PROCEDURE DestructAll(VAR graph : Graph;
  56.                               desN  : DestructN;
  57.                               desE  : DestructE);
  58.  
  59.  
  60.     PROCEDURE AddNode(VAR graph : Graph;node : NodePtr);
  61.  
  62.     PROCEDURE RemoveNode(VAR graph : Graph;
  63.                              node  : NodePtr;
  64.                              des   : DestructE);
  65.  
  66.     PROCEDURE DeleteNode(VAR graph : Graph;
  67.                              node  : NodePtr);
  68.  
  69.  
  70.     PROCEDURE AddEdge(VAR graph : Graph;
  71.                           src,
  72.                           dst   : NodePtr;
  73.                           edge  : EdgePtr);
  74.  
  75.     PROCEDURE RemoveEdge(VAR graph : Graph;
  76.                              edge  : EdgePtr);
  77.  
  78.     PROCEDURE DeleteEdge(VAR graph : Graph;
  79.                              edge  : EdgePtr);
  80.  
  81.     PROCEDURE FindEdge(VAR graph : Graph;
  82.                            src,
  83.                            dst   : NodePtr):EdgePtr;
  84.  
  85.  
  86.     PROCEDURE SortTopological(VAR graph : Graph);
  87.  
  88.  
  89.     PROCEDURE ApplyNodes(VAR graph : Graph;
  90.                              apply : ApplyN);
  91.  
  92.     PROCEDURE ApplyToEdges(VAR graph : Graph;
  93.                                node  : NodePtr;
  94.                                apply : ApplyE);
  95.  
  96.     PROCEDURE ApplyFromEdges(VAR graph : Graph;
  97.                                  node  : NodePtr;
  98.                                  apply : ApplyE);
  99.  
  100.     PROCEDURE ApplyAllEdges(VAR graph : Graph;
  101.                                 apply : ApplyE);
  102.  
  103.  
  104.     PROCEDURE ApplyDepthFirst(VAR graph  : Graph;
  105.                                   root   : NodePtr;
  106.                                   applyN : ApplyN;
  107.                                   applyE : ApplyE);
  108.  
  109.     PROCEDURE ApplyBreathFirst(VAR graph  : Graph;
  110.                                    root   : NodePtr;
  111.                                    applyN : ApplyN;
  112.                                    applyE : ApplyE);
  113.  
  114.     PROCEDURE MarkNodes(VAR graph : Graph);
  115.  
  116.     PROCEDURE ApplyMarked(VAR graph : Graph;
  117.                               apply : ApplyN);
  118.  
  119.   END DirectedGraphs;
  120.  
  121. END Graphs.
  122.  
  123.