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;