diff options
Diffstat (limited to 'src/packrat-graphs.adb')
-rw-r--r-- | src/packrat-graphs.adb | 214 |
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; |