summaryrefslogtreecommitdiff
path: root/src/packrat-graphs.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/packrat-graphs.adb')
-rw-r--r--src/packrat-graphs.adb214
1 files changed, 202 insertions, 12 deletions
diff --git a/src/packrat-graphs.adb b/src/packrat-graphs.adb
index 2cf74b3..1206a89 100644
--- a/src/packrat-graphs.adb
+++ b/src/packrat-graphs.adb
@@ -3,6 +3,86 @@
package body Packrat.Graphs is
+
+ function Leaf
+ (New_Item : in Element_Array;
+ Start : in Positive;
+ Finish : in Natural)
+ return Node is
+ begin
+ return This : Node;
+ end Leaf;
+
+
+ function Branch
+ (Label : in Label_Enum;
+ Start : in Positive;
+ Finish : in Natural)
+ return Node is
+ begin
+ return This : Node;
+ end Branch;
+
+
+
+
+
+ function Is_Leaf
+ (This : in Node)
+ return Boolean is
+ begin
+ return False;
+ end Is_Leaf;
+
+
+ function Is_Branch
+ (This : in Node)
+ return Boolean is
+ begin
+ return False;
+ end Is_Branch;
+
+
+
+
+
+ function Label
+ (This : in Node)
+ return Label_Enum is
+ begin
+ return Label_Enum'First;
+ end Label;
+
+
+ function Elements
+ (This : in Node)
+ return Element_Array
+ is
+ Empty : Element_Array (1 .. 0);
+ begin
+ return Empty;
+ end Elements;
+
+
+ function Start
+ (This : in Node)
+ return Positive is
+ begin
+ return 1;
+ end Start;
+
+
+ function Finish
+ (This : in Node)
+ return Natural is
+ begin
+ return 0;
+ end Finish;
+
+
+
+
+
function Is_Nothing
(Position : in Cursor)
return Boolean is
@@ -22,6 +102,14 @@ package body Packrat.Graphs is
end Depth;
+ function Is_Node
+ (Position : in Cursor)
+ return Boolean is
+ begin
+ return False;
+ end Is_Node;
+
+
function Is_Root
(Position : in Cursor)
return Boolean is
@@ -241,24 +329,21 @@ package body Packrat.Graphs is
- function Leaf
- (New_Item : in Element_Array;
- Start : in Positive;
- Finish : in Natural)
+ function Singleton
+ (Input : in My_Interfaces.Node'Class)
return Parse_Graph is
begin
return This : Parse_Graph;
- end Leaf;
+ end Singleton;
- function Branch
- (Label : in Label_Enum;
- Start : in Positive;
- Finish : in Natural)
- return Parse_Graph is
+ function Node_At
+ (Container : in Parse_Graph;
+ Position : in My_Interfaces.Cursor'Class)
+ return Node_Reference is
begin
- return This : Parse_Graph;
- end Branch;
+ return (Data => No_Node'Unrestricted_Access);
+ end Node_At;
@@ -366,6 +451,111 @@ package body Packrat.Graphs is
end Find;
+
+
+
+ function Is_Valid_Node
+ (Position : in Iter_Cursor)
+ return Boolean is
+ begin
+ return Position.Data.Is_Node;
+ end Is_Valid_Node;
+
+
+
+
+
+ function Iterate
+ (This : in Parse_Graph)
+ return Graph_Iterators.Reversible_Iterator'Class is
+ begin
+ return Result : Reversible_Iterator do
+ Result.My_Container := This'Unrestricted_Access;
+ Result.My_Position := No_Position;
+ end return;
+ end Iterate;
+
+
+ function Iterate_Subtree
+ (This : in Parse_Graph;
+ Position : in My_Interfaces.Cursor'Class)
+ return Graph_Iterators.Reversible_Iterator'Class is
+ begin
+ return Result : Reversible_Iterator do
+ Result.My_Container := This'Unrestricted_Access;
+ Result.My_Position := No_Position;
+ end return;
+ end Iterate_Subtree;
+
+
+ function Iterate_Choice
+ (This : in Parse_Graph;
+ Func : in Choosing_Function)
+ return Graph_Iterators.Forward_Iterator'Class is
+ begin
+ return Result : Forward_Iterator do
+ Result.My_Container := This'Unrestricted_Access;
+ Result.My_Position := No_Position;
+ end return;
+ end Iterate_Choice;
+
+
+
+
+
+ function First
+ (Object : in Forward_Iterator)
+ return Iter_Cursor is
+ begin
+ return (Data => Object.My_Position'Unrestricted_Access);
+ end First;
+
+ function Next
+ (Object : in Forward_Iterator;
+ Place : in Iter_Cursor)
+ return Iter_Cursor is
+ begin
+ return (Data => Object.My_Position'Unrestricted_Access);
+ end Next;
+
+
+
+
+
+ function First
+ (Object : in Reversible_Iterator)
+ return Iter_Cursor is
+ begin
+ return (Data => Object.My_Position'Unrestricted_Access);
+ end First;
+
+
+ function Next
+ (Object : in Reversible_Iterator;
+ Place : in Iter_Cursor)
+ return Iter_Cursor is
+ begin
+ return (Data => Object.My_Position'Unrestricted_Access);
+ end Next;
+
+
+ function Last
+ (Object : in Reversible_Iterator)
+ return Iter_Cursor is
+ begin
+ return (Data => Object.My_Position'Unrestricted_Access);
+ end Last;
+
+
+ function Previous
+ (Object : in Reversible_Iterator;
+ Place : in Iter_Cursor)
+ return Iter_Cursor is
+ begin
+ return (Data => Object.My_Position'Unrestricted_Access);
+ end Previous;
+
+
end Packrat.Graphs;