zeromq_ada_4.1.5_b2a857f7/examples/zmq-examples-sparse.ads

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
-------------------------------------------------------------------------------
--            Copyright (C) 2020-2030, per.s.sandberg@bahnhof.se             --
--                                                                           --
--  Permission is hereby granted, free of charge, to any person obtaining a  --
--  copy of this software and associated documentation files                 --
--  (the "Software"), to deal in the Software without restriction, including --
--  without limitation the rights to use, copy, modify, merge, publish,      --
--  distribute, sublicense, and / or sell copies of the Software, and to     --
--  permit persons to whom the Software is furnished to do so, subject to    --
--  the following conditions :                                               --
--                                                                           --
--  The above copyright notice and this permission notice shall be included  --
--  in all copies or substantial portions of the Software.                   --
--                                                                           --
--  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  --
--  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               --
--  MERCHANTABILITY,                                                         --
--  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL  --
--  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR     --
--  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,    --
--  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR    --
--  OTHER DEALINGS IN THE SOFTWARE.                                          --
-------------------------------------------------------------------------------



with Ada.Containers.Indefinite_Vectors;
package ZMQ.Examples.Sparse is
   type Sparse_Data;
   type Sparse_Data_Access is access all Sparse_Data'Class;

   type Sparse_Data (Name : not null access String) is abstract tagged record
      Changed : Boolean := False;
      Parent  : Sparse_Data_Access;
   end record;

   package Sparse_Vectors is new
     Ada.Containers.Indefinite_Vectors (Natural, Sparse_Data_Access);

   type Sparse_Integer is new Sparse_Data with record
      Value : access Integer;
   end record;
   procedure Set (Self : Sparse_Integer; Value : Integer);

   type Sparse_Boolean is new Sparse_Data with record
      Value : access Boolean;
   end record;

   procedure Set (Self : Sparse_Integer; Value : Boolean);
   type Sparse_Float is new Sparse_Data with record
      Value : access Float;
   end record;
   type Sparse_String is new Sparse_Data with record
      Value : access String;
   end record;
   type Sparse_Container is new Sparse_Data with record
      Value : access Sparse_Vectors.Vector;
   end record;
   type Sparse_Object is new Sparse_Data with record
      Value : access Sparse_Vectors.Vector;
   end record;

end ZMQ.Examples.Sparse;