package body AAA.Caches.Files is ------------- -- Discard -- ------------- overriding procedure Discard (This : in out Cache) is begin This.Data := (Valid => False); end Discard; ------------- -- Element -- ------------- function Element (This : in out Cache; Filename : String) return Cached is use type Ada.Calendar.Time; use type Ada.Directories.File_Size; function Unchanged return Boolean is (This.Data.Valid and then This.Data.Size = Ada.Directories.Size (Filename) and then This.Data.Time = Ada.Directories.Modification_Time (Filename)); begin if This.Has_Element and then Unchanged then return This.Data.Value; else This.Data := (Valid => True, Size => Ada.Directories.Size (Filename), Time => Ada.Directories.Modification_Time (Filename), Value => Load (Filename)); return This.Data.Value; end if; end Element; --------- -- Set -- --------- procedure Set (This : in out Cache; Value : Cached; Filename : String) is begin Write (Value, Filename); This.Data := (Valid => True, Size => Ada.Directories.Size (Filename), Time => Ada.Directories.Modification_Time (Filename), Value => Load (Filename)); end Set; end AAA.Caches.Files;