87 lines
2.0 KiB
ObjectPascal
87 lines
2.0 KiB
ObjectPascal
unit Myc.Data.Types.Tuple;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils,
|
|
Myc.Data.Types;
|
|
|
|
type
|
|
// Implements the simple tuple data value.
|
|
TImplDataTupleValue = class(TInterfacedObject, IDataValue, IDataTupleValue)
|
|
private
|
|
FItems: TArray<IDataValue>;
|
|
function GetDataType: IDataType;
|
|
function GetItemCount: Integer;
|
|
function GetItem(Idx: Integer): IDataValue;
|
|
public
|
|
constructor Create(const AItems: array of IDataValue);
|
|
end;
|
|
|
|
// Implements the singleton tuple data type.
|
|
TImplDataTupleType = class(TInterfacedObject, IDataType, IDataTupleType)
|
|
strict private
|
|
class var
|
|
FSingleton: IDataTupleType;
|
|
class constructor CreateClass;
|
|
private
|
|
function GetName: String;
|
|
function GetKind: TDataKind;
|
|
public
|
|
function CreateValue(const AItems: array of IDataValue): IDataTupleValue;
|
|
class property Singleton: IDataTupleType read FSingleton;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TImplDataTupleValue }
|
|
|
|
constructor TImplDataTupleValue.Create(const AItems: array of IDataValue);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
inherited Create;
|
|
SetLength(FItems, Length(AItems));
|
|
for i := 0 to High(AItems) do
|
|
FItems[i] := AItems[i];
|
|
end;
|
|
|
|
function TImplDataTupleValue.GetDataType: IDataType;
|
|
begin
|
|
Result := TImplDataTupleType.Singleton;
|
|
end;
|
|
|
|
function TImplDataTupleValue.GetItem(Idx: Integer): IDataValue;
|
|
begin
|
|
Result := FItems[Idx];
|
|
end;
|
|
|
|
function TImplDataTupleValue.GetItemCount: Integer;
|
|
begin
|
|
Result := Length(FItems);
|
|
end;
|
|
|
|
{ TImplDataTupleType }
|
|
|
|
class constructor TImplDataTupleType.CreateClass;
|
|
begin
|
|
FSingleton := TImplDataTupleType.Create;
|
|
end;
|
|
|
|
function TImplDataTupleType.CreateValue(const AItems: array of IDataValue): IDataTupleValue;
|
|
begin
|
|
Result := TImplDataTupleValue.Create(AItems);
|
|
end;
|
|
|
|
function TImplDataTupleType.GetName: String;
|
|
begin
|
|
Result := 'Tuple';
|
|
end;
|
|
|
|
function TImplDataTupleType.GetKind: TDataKind;
|
|
begin
|
|
Result := dkTuple;
|
|
end;
|
|
|
|
end.
|