private with Ada.Calendar;
private with Ada.Directories;
generic
type Cached is private;
with function Load (Filename : String) return Cached;
with procedure Write (Data : Cached; Filename : String);
package AAA.Caches.Files is
type Cache is new Caches.Cache with private;
overriding
procedure Discard (This : in out Cache);
function Element (This : in out Cache;
Filename : String)
return Cached;
overriding
function Has_Element (This : Cache) return Boolean;
procedure Set (This : in out Cache;
Value : Cached;
Filename : String);
-- Store with write-through the cached value. To ensure consistency, the
-- value is immediately reloaded. Hence, if there is any inconsistency
-- between load/write, at least the value used will match the one on disk.
private
type Cache_Data (Valid : Boolean := False) is record
case Valid is
when False => null;
when True =>
Size : Ada.Directories.File_Size;
Time : Ada.Calendar.Time;
Value : aliased Cached;
end case;
end record;
type Cache is new Caches.Cache with record
Data : Cache_Data;
end record;
-----------------
-- Has_Element --
-----------------
overriding
function Has_Element (This : Cache) return Boolean
is (This.Data.Valid);
end AAA.Caches.Files;