114 lines
2.4 KiB
ObjectPascal
114 lines
2.4 KiB
ObjectPascal
unit Myc.Data.Types.Float;
|
|
|
|
interface
|
|
|
|
uses
|
|
Myc.Data.Types;
|
|
|
|
type
|
|
TDataValueHelper = record helper for TDataValue
|
|
public
|
|
function AsFloat: IDataFloatValue;
|
|
end;
|
|
|
|
TDataTypeHelper = record helper for TDataType
|
|
public
|
|
function AsFloat: IDataFloatType;
|
|
end;
|
|
|
|
// Public factory for creating float values.
|
|
TFloatType = record
|
|
public
|
|
class function CreateValue(Init: Double): IDataFloatValue; static;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
System.SysUtils;
|
|
|
|
type
|
|
// Implements the float data value.
|
|
TImplDataFloatValue = class(TInterfacedObject, IDataValue, IDataFloatValue)
|
|
private
|
|
FValue: Double;
|
|
public
|
|
constructor Create(const AValue: Double);
|
|
|
|
// IDataValue
|
|
function GetDataType: IDataType;
|
|
|
|
// IDataFloatValue
|
|
function GetValue: Double;
|
|
end;
|
|
|
|
// Implements the float data type.
|
|
TImplDataFloatType = class(TInterfacedObject, IDataType, IDataFloatType)
|
|
strict private
|
|
class var
|
|
FSingleton: IDataFloatType;
|
|
class constructor CreateClass;
|
|
public
|
|
function GetName: String;
|
|
function CreateValue(Init: Double): IDataFloatValue;
|
|
class property Singleton: IDataFloatType read FSingleton;
|
|
end;
|
|
|
|
{ TImplDataFloatValue }
|
|
|
|
constructor TImplDataFloatValue.Create(const AValue: Double);
|
|
begin
|
|
inherited Create;
|
|
FValue := AValue;
|
|
end;
|
|
|
|
function TImplDataFloatValue.GetDataType: IDataType;
|
|
begin
|
|
Result := TImplDataFloatType.Singleton;
|
|
end;
|
|
|
|
function TImplDataFloatValue.GetValue: Double;
|
|
begin
|
|
Result := FValue;
|
|
end;
|
|
|
|
{ TImplDataFloatType }
|
|
|
|
class constructor TImplDataFloatType.CreateClass;
|
|
begin
|
|
FSingleton := TImplDataFloatType.Create;
|
|
end;
|
|
|
|
function TImplDataFloatType.GetName: String;
|
|
begin
|
|
Result := 'Float';
|
|
end;
|
|
|
|
function TImplDataFloatType.CreateValue(Init: Double): IDataFloatValue;
|
|
begin
|
|
Result := TImplDataFloatValue.Create(Init);
|
|
end;
|
|
|
|
{ TFloatType }
|
|
|
|
class function TFloatType.CreateValue(Init: Double): IDataFloatValue;
|
|
begin
|
|
Result := TImplDataFloatType.Singleton.CreateValue(Init);
|
|
end;
|
|
|
|
{ TDataValueHelper }
|
|
|
|
function TDataValueHelper.AsFloat: IDataFloatValue;
|
|
begin
|
|
Result := Self.DataValue as IDataFloatValue;
|
|
end;
|
|
|
|
{ TDataTypeHelper }
|
|
|
|
function TDataTypeHelper.AsFloat: IDataFloatType;
|
|
begin
|
|
Result := Self.DataType as IDataFloatType;
|
|
end;
|
|
|
|
end.
|