summaryrefslogtreecommitdiff
path: root/src/packrat-graphs.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/packrat-graphs.ads')
-rw-r--r--src/packrat-graphs.ads235
1 files changed, 235 insertions, 0 deletions
diff --git a/src/packrat-graphs.ads b/src/packrat-graphs.ads
new file mode 100644
index 0000000..4095360
--- /dev/null
+++ b/src/packrat-graphs.ads
@@ -0,0 +1,235 @@
+
+
+generic
+ type Label_Enum is (<>);
+ type Element is private;
+ type Element_Array is array (Positive range <>) of Element;
+ with package My_Interfaces is new Interfaces (Label_Enum, Element, Element_Array);
+package Packrat.Graphs is
+
+
+
+ type Cursor is new My_Interfaces.Cursor with private;
+
+ type Parse_Graph is new My_Interfaces.Graph with private;
+
+
+
+
+ function Is_Nothing
+ (Position : in Cursor)
+ return Boolean;
+
+
+
+
+ function Depth
+ (Position : in Cursor)
+ return Natural;
+
+ function Is_Root
+ (Position : in Cursor)
+ return Boolean;
+
+ function Is_Branch
+ (Position : in Cursor)
+ return Boolean;
+
+ function Is_Leaf
+ (Position : in Cursor)
+ return Boolean;
+
+ function Label
+ (Position : in Cursor)
+ return Label_Enum;
+
+ function Elements
+ (Position : in Cursor)
+ return Element_Array;
+
+
+
+
+ function Start
+ (Position : in Cursor)
+ return Positive;
+
+ function Finish
+ (Position : in Cursor)
+ return Natural;
+
+ function Choices
+ (Position : in Cursor)
+ return Natural;
+
+
+
+
+ function Parent
+ (Position : in Cursor)
+ return Cursor;
+
+ function Child_Count
+ (Position : in Cursor;
+ Choice : in Positive)
+ return Natural;
+
+ function Child_Count
+ (Position : in Cursor)
+ return Natural;
+
+ function All_Child_Count
+ (Position : in Cursor)
+ return Natural;
+
+ function First_Child
+ (Position : in Cursor;
+ Choice : in Positive)
+ return Cursor;
+
+ function Last_Child
+ (Position : in Cursor;
+ Choice : in Positive)
+ return Cursor;
+
+ function First_Child
+ (Position : in Cursor)
+ return Cursor;
+
+ function Last_Child
+ (Position : in Cursor)
+ return Cursor;
+
+ function Next_Sibling
+ (Position : in Cursor)
+ return Cursor;
+
+ function Prev_Sibling
+ (Position : in Cursor)
+ return Cursor;
+
+ procedure Delete_Children
+ (Position : in out Cursor;
+ Choice : in Positive);
+
+ procedure Delete_Children
+ (Position : in out Cursor);
+
+ procedure Delete_All_Children
+ (Position : in out Cursor);
+
+
+
+
+ function Equal_Subgraph
+ (Left, Right : in Cursor)
+ return Boolean;
+
+ function Subgraph_Node_Count
+ (Position : in Cursor)
+ return Natural;
+
+ function Find_In_Subgraph
+ (Position : in Cursor;
+ Item : in Element_Array)
+ return Cursor;
+
+
+
+
+ function Contains
+ (Container : in Parse_Graph;
+ Position : in My_Interfaces.Cursor'Class)
+ return Boolean;
+
+
+
+
+ function Leaf
+ (New_Item : in Element_Array;
+ Start : in Positive;
+ Finish : in Natural)
+ return Parse_Graph;
+
+ function Branch
+ (Label : in Label_Enum;
+ Start : in Positive;
+ Finish : in Natural)
+ return Parse_Graph;
+
+
+
+
+ function Is_Empty
+ (Container : in Parse_Graph)
+ return Boolean;
+
+ function Is_Ambiguous
+ (Container : in Parse_Graph)
+ return Boolean;
+
+ function Node_Count
+ (Container : in Parse_Graph)
+ return Natural;
+
+
+
+
+ function Root_Count
+ (Container : in Parse_Graph)
+ return Natural;
+
+ function Root
+ (Container : in Parse_Graph;
+ Index : in Positive)
+ return My_Interfaces.Cursor'Class;
+
+
+
+
+ procedure Append
+ (Container : in out Parse_Graph;
+ Addition : in Parse_Graph);
+
+ procedure Prepend
+ (Container : in out Parse_Graph;
+ Addition : in Parse_Graph);
+
+ procedure Attach_Choice
+ (Container : in out Parse_Graph;
+ Position : in My_Interfaces.Cursor'Class;
+ Addition : in Parse_Graph);
+
+
+
+
+ procedure Clear
+ (Container : in out Parse_Graph);
+
+ procedure Delete_Position
+ (Container : in out Parse_Graph;
+ Position : in out My_Interfaces.Cursor'Class);
+
+
+
+
+ function Find
+ (Container : in Parse_Graph;
+ Item : in Element_Array)
+ return My_Interfaces.Cursor'Class;
+
+
+
+
+private
+
+
+ type Cursor is new My_Interfaces.Cursor with null record;
+
+
+ type Parse_Graph is new My_Interfaces.Graph with null record;
+
+
+end Packrat.Graphs;
+
+