New type system - Decimals
This commit is contained in:
@@ -422,6 +422,17 @@ type
|
||||
class function RecordOf(const Fields: array of TRecordField): TDataType.TRecord; overload; static;
|
||||
class function EnumOf(const AName: string; const AIdentifiers: array of string): TDataType.TEnum; static;
|
||||
|
||||
function AsOrdinal: TDataType.TOrdinal; inline;
|
||||
function AsFloat: TDataType.TFloat; inline;
|
||||
function AsText: TDataType.TText; inline;
|
||||
function AsTimestamp: TDataType.TTimestamp; inline;
|
||||
function AsDecimal: TDataType.TDecimal; inline;
|
||||
function AsRecord: TDataType.TRecord; inline;
|
||||
function AsTuple: TDataType.TTuple; inline;
|
||||
function AsArray: TDataType.TArray; inline;
|
||||
function AsEnum: TDataType.TEnum; inline;
|
||||
function AsMethod: TDataType.TMethod; inline;
|
||||
|
||||
property DataType: IDataType read FDataType;
|
||||
property Name: String read GetName;
|
||||
property Kind: TDataKind read GetKind;
|
||||
@@ -1172,4 +1183,74 @@ begin
|
||||
Result.FDataValue := A;
|
||||
end;
|
||||
|
||||
function TDataType.AsArray: TDataType.TArray;
|
||||
begin
|
||||
if (FDataType.Kind <> dkArray) then
|
||||
raise EInvalidCast.Create('Array expected');
|
||||
Result.Create(IDataArrayType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsDecimal: TDataType.TDecimal;
|
||||
begin
|
||||
if (FDataType.Kind <> dkDecimal) then
|
||||
raise EInvalidCast.Create('Decimal expected');
|
||||
Result.Create(IDataDecimalType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsEnum: TDataType.TEnum;
|
||||
begin
|
||||
if (FDataType.Kind <> dkEnum) then
|
||||
raise EInvalidCast.Create('Enum expected');
|
||||
Result.Create(IDataEnumType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsFloat: TDataType.TFloat;
|
||||
begin
|
||||
if (FDataType.Kind <> dkFloat) then
|
||||
raise EInvalidCast.Create('Float expected');
|
||||
Result.Create(IDataFloatType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsMethod: TDataType.TMethod;
|
||||
begin
|
||||
if (FDataType.Kind <> dkMethod) then
|
||||
raise EInvalidCast.Create('Method expected');
|
||||
Result.Create(IDataMethodType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsOrdinal: TDataType.TOrdinal;
|
||||
begin
|
||||
if (FDataType.Kind <> dkOrdinal) then
|
||||
raise EInvalidCast.Create('Ordinal expected');
|
||||
Result.Create(IDataOrdinalType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsRecord: TDataType.TRecord;
|
||||
begin
|
||||
if (FDataType.Kind <> dkRecord) then
|
||||
raise EInvalidCast.Create('Record expected');
|
||||
Result.Create(IDataRecordType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsText: TDataType.TText;
|
||||
begin
|
||||
if (FDataType.Kind <> dkText) then
|
||||
raise EInvalidCast.Create('Text expected');
|
||||
Result.Create(IDataTextType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsTimestamp: TDataType.TTimestamp;
|
||||
begin
|
||||
if (FDataType.Kind <> dkTimestamp) then
|
||||
raise EInvalidCast.Create('Timestamp expected');
|
||||
Result.Create(IDataTimestampType(FDataType));
|
||||
end;
|
||||
|
||||
function TDataType.AsTuple: TDataType.TTuple;
|
||||
begin
|
||||
if (FDataType.Kind <> dkTuple) then
|
||||
raise EInvalidCast.Create('Tuple expected');
|
||||
Result.Create(IDataTupleType(FDataType));
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user