| with Ada.Characters.Handling; |
| with Ada.Containers; |
| with Ada.Containers.Indefinite_Hashed_Maps; |
| with Ada.Strings.Hash; |
| |
| package body Opt50_Pkg is |
| |
| type Enum_Name is array (Enum) of access constant String; |
| |
| Enum_Name_Table : constant Enum_Name := ( |
| One => new String'("one"), |
| Two => new String'("two"), |
| Three => new String'("three")); |
| |
| package String_To_Enum_Map is new Ada.Containers.Indefinite_Hashed_Maps |
| (Key_Type => String, Element_Type => Enum, |
| Hash => Ada.Strings.Hash, Equivalent_Keys => "="); |
| |
| function Fill_Hashed_Map return String_To_Enum_Map.Map is |
| Res : String_To_Enum_Map.Map; |
| use String_To_Enum_Map; |
| begin |
| for I in Enum_Name_Table'Range loop |
| declare |
| Kind : constant String := Enum_Name_Table (I).all; |
| begin |
| Res.Insert(Key => Kind, New_Item => I); |
| end; |
| end loop; |
| return Res; |
| end; |
| |
| String_To_Enum : constant String_To_Enum_Map.Map := Fill_Hashed_Map; |
| |
| procedure Get (Kind : String; Result : out Enum; Success : out Boolean) is |
| X : constant String := Ada.Characters.Handling.To_Lower (Kind); |
| use String_To_Enum_Map; |
| Curs : constant Cursor := String_To_Enum.Find (X); |
| begin |
| Success := Curs /= No_Element; |
| if Success then |
| Result := Element(Curs); |
| end if; |
| end; |
| |
| procedure Set (A : Enum_Boolean_Array) is null; |
| |
| end Opt50_Pkg; |