[Ada] Improve performance of Containers.Functional_Base
authorJoffrey Huguet <huguet@adacore.com>
Wed, 14 Aug 2019 09:52:58 +0000 (09:52 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 14 Aug 2019 09:52:58 +0000 (09:52 +0000)
commit4b0f6ee8b58dedc18192933e35f81b2b71d44fe7
treebbb97fab40b6429d3c36b9ea1850eba416b81cf5
parentff0889eb4d7f34270a6cddb3351fe8ee4fc9bbe0
[Ada] Improve performance of Containers.Functional_Base

This patch modifies the implementation of Functional_Base to damp the
cost of its subprograms at runtime in specific cases. Instead of copying
the entire underlying array to create a new container, containers can
share the same Array_Base attribute. Performance on common use cases of
formal and functional containers is improved with this patch.

2019-08-14  Joffrey Huguet  <huguet@adacore.com>

gcc/ada/

* libgnat/a-cofuba.ads: Add a Length attribute to type
Container. Add a type Array_Base which replaces the previous
Elements attribute of Container.
(Content_Init): New subprogram. It is used to initialize the
Base attribute of Container.
* libgnat/a-cofuba.adb (Resize): New subprogram. It is used to
resize the underlying array of a container if necessary.
(=, <=, Find, Get, Intersection, Length, Num_Overlaps, Set,
Union): Update to match changes in type declarations.
(Add): Modify body to damp the time and space cost in a specific
case.
(Content_Init): New subprogram. It is used to initialize the
Base attribute of Container.
(Remove): Modify body to damp the time and space cost in a
specific case.

From-SVN: r274474
gcc/ada/ChangeLog
gcc/ada/libgnat/a-cofuba.adb
gcc/ada/libgnat/a-cofuba.ads