From: Shark8 <onewingedshark@gmail.com>
Subject: Interesting containers problem.
Date: Fri, 17 Apr 2015 06:42:55 -0700 (PDT)
Date: 2015-04-17T06:42:55-07:00 [thread overview]
Message-ID: <8def4a86-5835-4368-b414-63e12f1074e8@googlegroups.com> (raw)
Ok, so let's say we have a type for Identifiers:
SubType Identifier is String
with Dynamic_Predicate => Is_Valid( Identifier )
or else raise Parse_Error with "Invalid identifier: """ & Identifier & '"';
--...
-- ACH is a rename for Ada.Characters.Handling.
Function Is_Valid( Input: String ) return Boolean is
( Input'Length in Positive and then
ACH.Is_Letter(Input(Input'First)) and then
ACH.Is_Alphanumeric(Input(Input'Last)) and then
(for all Ch of Input => Ch = '_' or ACH.Is_Alphanumeric(Ch)) and then
(for all Index in Input'First..Positive'Pred(Input'Last) =>
(if Input(Index) = '_' then Input(Index+1) /= '_')
)
);
And a few types for types:
Type Data_Type is ( Integer, Float, Fixed );
Type Variable_Data( Type_Value : Data_Type ) is
case Type_Value is
when Integer => Integer_Value : Standard.Integer;
when Float => Float_Value : Standard.Float;
when Fixed => Fixed_Value : Fixed_Type; -- Defined elsewhere.
end case;
end record;
Now we can define a Symbol-table using the standard containers simply with this:
Package Symbol_Table is
new Ada.Containers.Indefinite_Ordered_Maps(
Key_Type => Identifier,
Element_Type => Variable_Data,
"<" => Ada.Strings.Less_Case_Insensitive,
"=" => "="
);
And that's all well and good; however, there is one limitation here that is revealed when you need nesting scopes -- there is, apparently, no way to define an Element_Type to feed to Indefinite_Ordered_Maps which is an instance of Indefinite_Ordered_Maps.Maps or an instance of Variable_Data (by way of a variant record; even one which is forward declared).
What would be the proper way to handle this sort of situation?
next reply other threads:[~2015-04-17 13:42 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-17 13:42 Shark8 [this message]
2015-04-17 19:12 ` Interesting containers problem Peter Chapin
2015-04-17 20:45 ` Randy Brukardt
2015-04-17 21:06 ` Dmitry A. Kazakov
2015-04-18 17:21 ` Shark8
2015-04-19 17:10 ` brbarkstrom
2015-04-20 23:39 ` Randy Brukardt
2015-04-21 3:05 ` Randy Brukardt
2015-04-21 8:06 ` Dmitry A. Kazakov
2015-04-21 8:28 ` J-P. Rosen
2015-04-21 8:45 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox