Fri, 27 Sep 2002 21:31:56 +0100
This is a question for users of the BCs. Some of you may get it twice;
I've been investigating giving some of the Containers discriminants to
specify number of hash buckets / maximum size for bounded Containers.
This makes bounded Maps look like
with function Hash (K : Key) return Natural is <>;
Buckets : Positive;
Maximum_Size : Positive;
package BC.Containers.Maps.Bounded is
(Number_Of_Buckets : Positive;
Maximum_Size : Positive) is new Abstract_Map with private;
subtype Map is Unconstrained_Map (Number_Of_Buckets => Buckets,
Maximum_Size => Maximum_Size);
For many purposes this is a drop-in replacement. However, there are
* although I write "function Null_Container return Unconstrained_Map;",
what you actually get is a Map (ie, it's constrained).
Null_Container was provided for people who wanted to provide
initializers for records containing Containers.
* I can't see how to provide the Guarded forms, at least without a
reversion to the old way of doing things where each Guarded
container would have required a child package for each Form.
I would rather like to drop the concurrency support (Guarded and
Synchronized forms), because
* Guarded forms will take a lot of effort to provide, see above.
* I've only provided a few Synchronized forms, and there haven't been
any requests for more.
* I don't believe that I can provide all the options you might need
for your particular problems -- I certainly didn't manage it for
myself! If you need containers to support some concurrent
abstraction, use them with protected types and tasks do do exactly
what _you_ want.
Any comments gratefully received.