-------------------------------------------------------------------------------
-- 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;