diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-09-27 12:03:09 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-09-27 12:03:09 +0200 |
commit | da124b6afd64364d321813cee77442a1de624ec5 (patch) | |
tree | 119eb2e20370d17d8cd10aad56e8c0dc1560c851 /gcc/ada/a-cbmutr.adb | |
parent | 706a4067b883765331b693caded5f08a43eb2645 (diff) | |
download | gcc-da124b6afd64364d321813cee77442a1de624ec5.zip gcc-da124b6afd64364d321813cee77442a1de624ec5.tar.gz gcc-da124b6afd64364d321813cee77442a1de624ec5.tar.bz2 |
[multiple changes]
2011-09-27 Robert Dewar <dewar@adacore.com>
* a-comutr.ads: Minor reformatting.
2011-09-27 Ed Schonberg <schonberg@adacore.com>
* a-cimutr.adb, a-cimutr.ads, a-cbmutr.adb, a-cbmutr.ads: Add children
iterators to multiway trees.
2011-09-27 Yannick Moy <moy@adacore.com>
* debug.adb (d.D): New option for strict Alfa mode.
* opt.ads (Strict_Alfa_Mode): New flag to interpret compiler
permissions as strictly as possible.
* sem_ch3.adb (Signed_Integer_Type_Declaration): In non-strict
Alfa mode, now, interpret ranges of base types like GNAT does; in
strict mode, simply change the range of the implicit base Itype.
* gnat1drv.adb: Update comments. Set Strict_Alfa_Mode.
From-SVN: r179258
Diffstat (limited to 'gcc/ada/a-cbmutr.adb')
-rw-r--r-- | gcc/ada/a-cbmutr.adb | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/gcc/ada/a-cbmutr.adb b/gcc/ada/a-cbmutr.adb index 8e6c148..f4bdc5e 100644 --- a/gcc/ada/a-cbmutr.adb +++ b/gcc/ada/a-cbmutr.adb @@ -40,10 +40,29 @@ package body Ada.Containers.Bounded_Multiway_Trees is end record; overriding function First (Object : Iterator) return Cursor; + overriding function Next (Object : Iterator; Position : Cursor) return Cursor; + type Child_Iterator is new Tree_Iterator_Interfaces.Reversible_Iterator with + record + Container : Tree_Access; + Position : Cursor; + end record; + + overriding function First (Object : Child_Iterator) return Cursor; + + overriding function Next + (Object : Child_Iterator; + Position : Cursor) return Cursor; + + overriding function Previous + (Object : Child_Iterator; + Position : Cursor) return Cursor; + + overriding function Last (Object : Child_Iterator) return Cursor; + ----------------------- -- Local Subprograms -- ----------------------- @@ -1241,6 +1260,14 @@ package body Ada.Containers.Bounded_Multiway_Trees is return Object.Position; end First; + function First (Object : Child_Iterator) return Cursor is + Node : Count_Type'Base; + + begin + Node := Object.Container.Nodes (Object.Position.Node).Children.First; + return (Object.Container, Node); + end First; + ----------------- -- First_Child -- ----------------- @@ -1809,6 +1836,16 @@ package body Ada.Containers.Bounded_Multiway_Trees is end loop; end Iterate_Children; + function Iterate_Children + (Container : Tree; + Parent : Cursor) + return Tree_Iterator_Interfaces.Reversible_Iterator'Class + is + pragma Unreferenced (Container); + begin + return Child_Iterator'(Parent.Container, Parent); + end Iterate_Children; + --------------------- -- Iterate_Subtree -- --------------------- @@ -1871,6 +1908,15 @@ package body Ada.Containers.Bounded_Multiway_Trees is Iterate_Children (Container, Subtree, Process); end Iterate_Subtree; + ---------- + -- Last -- + ---------- + + overriding function Last (Object : Child_Iterator) return Cursor is + begin + return Last_Child (Object.Position); + end Last; + ---------------- -- Last_Child -- ---------------- @@ -1992,6 +2038,19 @@ package body Ada.Containers.Bounded_Multiway_Trees is end if; end Next; + function Next + (Object : Child_Iterator; + Position : Cursor) return Cursor + is + + begin + if Object.Container /= Position.Container then + raise Program_Error; + end if; + + return Next_Sibling (Position); + end Next; + ------------------ -- Next_Sibling -- ------------------ @@ -2137,6 +2196,22 @@ package body Ada.Containers.Bounded_Multiway_Trees is Container.Count := Container.Count + Count; end Prepend_Child; + -------------- + -- Previous -- + -------------- + + overriding function Previous + (Object : Child_Iterator; + Position : Cursor) return Cursor + is + begin + if Object.Container /= Position.Container then + raise Program_Error; + end if; + + return Previous_Sibling (Position); + end Previous; + ---------------------- -- Previous_Sibling -- ---------------------- |