unit Code.Kata.Cache;
interface
uses
System.SysUtils,
System.Contnrs,
System.Classes,
System.Math;
type
TCache =
class
strict private
FObjectList : System.Contnrs.TObjectList;
private
function GetCurrentNumberOfElements : Integer;
function GetSize : Integer;
public
constructor Create(MaxSize : Integer);
function Contains(ID : Integer) : Boolean;
function Get(ID : Integer) : TObject;
procedure Put(ID : Integer; Item : TObject);
procedure Remove(ID : Integer);
property MaxSize : Integer
read GetSize;
property CurrentNumberOfElements : Integer
read GetCurrentNumberOfElements;
end;
implementation
{ TCache }
function TCache.
Contains(ID : Integer) : Boolean;
begin
Result := Get(ID) <>
nil;
end;
constructor TCache.Create(MaxSize : Integer);
begin
FObjectList := System.Contnrs.TObjectList.Create(True);
FObjectList.Capacity := MaxSize;
end;
function TCache.Get(ID : Integer) : TObject;
begin
Result :=
nil;
if InRange(ID, 0, FObjectList.Count - 1)
then
begin
Result := FObjectList.Items[ID];
end;
end;
function TCache.GetCurrentNumberOfElements : Integer;
begin
Result := FObjectList.Count;
end;
function TCache.GetSize : Integer;
begin
Result := FObjectList.Capacity;
end;
procedure TCache.Put(ID : Integer; Item : TObject);
begin
if ID <> -1
then
begin
FObjectList.Add(Item)
end
else
begin
FObjectList.Insert(ID, Item);
end;
end;
procedure TCache.Remove(ID : Integer);
begin
FObjectList.Delete(ID);
end;
end.