Reverting Ast Stream
This commit is contained in:
@@ -9,9 +9,7 @@ uses
|
||||
Myc.Utils,
|
||||
Myc.Data.Scalar,
|
||||
Myc.Data.Series,
|
||||
Myc.Data.Keyword,
|
||||
Myc.Trade.DataFeed,
|
||||
Myc.Ast.DataStream;
|
||||
Myc.Data.Keyword;
|
||||
|
||||
type
|
||||
TDataValueKind = (
|
||||
@@ -26,11 +24,7 @@ type
|
||||
vkMethod,
|
||||
vkInterface,
|
||||
vkPointer,
|
||||
vkGeneric,
|
||||
// --- Pipeline / Stream Extensions ---
|
||||
vkStreamProducer, // Pure Source (IProducer)
|
||||
vkStreamConverter, // Transformer (IConverter -> IProducer + IConsumer)
|
||||
vkStreamConsumer // Pure Sink (IConsumer)
|
||||
vkGeneric
|
||||
);
|
||||
|
||||
TDataValue = record
|
||||
@@ -72,11 +66,6 @@ type
|
||||
class operator Implicit(const AValue: String): TDataValue; overload; inline;
|
||||
class operator Implicit(const AValue: TDataValue.TFunc): TDataValue; overload; inline;
|
||||
|
||||
// --- Stream Implicits (NEW) ---
|
||||
class operator Implicit(const AValue: IStreamProducer): TDataValue; overload; inline;
|
||||
class operator Implicit(const AValue: IStreamConsumer): TDataValue; overload; inline;
|
||||
// Note: IStreamConverter is covered by IStreamProducer implicit or explicit factory
|
||||
|
||||
// --- Existing Factories ---
|
||||
class function FromIntf<T: IInterface>(const AValue: T): TDataValue; static;
|
||||
function AsIntf<T: IInterface>: T; inline;
|
||||
@@ -97,11 +86,6 @@ type
|
||||
class function FromGenericRecord(const AValue: IKeywordMapping<TDataValue>): TDataValue; static; inline;
|
||||
class function FromSeries(const AValue: ISeries): TDataValue; static; inline;
|
||||
|
||||
// --- Stream Factories (NEW) ---
|
||||
class function FromProducer(const AValue: IStreamProducer): TDataValue; static; inline;
|
||||
class function FromConverter(const AValue: IStreamConverter): TDataValue; static; inline;
|
||||
class function FromConsumer(const AValue: IStreamConsumer): TDataValue; static; inline;
|
||||
|
||||
// --- Existing Accessors ---
|
||||
function AsScalar: TScalar; inline;
|
||||
function AsMethod: TFunc; inline;
|
||||
@@ -112,11 +96,6 @@ type
|
||||
function AsSeries: ISeries; inline;
|
||||
function AsObject: TObject; overload; inline;
|
||||
|
||||
// --- Stream Accessors (NEW) ---
|
||||
function AsProducer: IStreamProducer; inline;
|
||||
function AsConverter: IStreamConverter; inline;
|
||||
function AsConsumer: IStreamConsumer; inline;
|
||||
|
||||
function ToString: String;
|
||||
property IsVoid: Boolean read GetIsVoid;
|
||||
property Kind: TDataValueKind read FKind;
|
||||
@@ -162,10 +141,6 @@ begin
|
||||
vkInterface: Result := 'Interface';
|
||||
vkPointer: Result := 'Pointer';
|
||||
vkGeneric: Result := 'Generic';
|
||||
// New types
|
||||
vkStreamProducer: Result := 'StreamProducer';
|
||||
vkStreamConverter: Result := 'StreamConverter';
|
||||
vkStreamConsumer: Result := 'StreamConsumer';
|
||||
else
|
||||
Result := 'Unknown';
|
||||
end;
|
||||
@@ -244,65 +219,6 @@ begin
|
||||
raise EInvalidCast.Create('Value is not a scalar');
|
||||
end;
|
||||
|
||||
// --- Implicit Operators (Streams) ---
|
||||
|
||||
class operator TDataValue.Implicit(const AValue: IStreamProducer): TDataValue;
|
||||
begin
|
||||
Result := FromProducer(AValue);
|
||||
end;
|
||||
|
||||
class operator TDataValue.Implicit(const AValue: IStreamConsumer): TDataValue;
|
||||
begin
|
||||
Result := FromConsumer(AValue);
|
||||
end;
|
||||
|
||||
// --- Factories (Streams) ---
|
||||
|
||||
class function TDataValue.FromProducer(const AValue: IStreamProducer): TDataValue;
|
||||
begin
|
||||
Result.FKind := vkStreamProducer;
|
||||
Result.FInterface := AValue;
|
||||
end;
|
||||
|
||||
class function TDataValue.FromConverter(const AValue: IStreamConverter): TDataValue;
|
||||
begin
|
||||
Result.FKind := vkStreamConverter;
|
||||
Result.FInterface := AValue;
|
||||
end;
|
||||
|
||||
class function TDataValue.FromConsumer(const AValue: IStreamConsumer): TDataValue;
|
||||
begin
|
||||
Result.FKind := vkStreamConsumer;
|
||||
Result.FInterface := AValue;
|
||||
end;
|
||||
|
||||
// --- Accessors (Streams) ---
|
||||
|
||||
function TDataValue.AsProducer: IStreamProducer;
|
||||
begin
|
||||
// Safe Hard-Cast: We know FInterface is compatible via FKind.
|
||||
if FKind in [vkStreamProducer, vkStreamConverter] then
|
||||
Result := IStreamProducer(Pointer(FInterface))
|
||||
else
|
||||
raise EInvalidCast.Create('Value is not a StreamProducer');
|
||||
end;
|
||||
|
||||
function TDataValue.AsConverter: IStreamConverter;
|
||||
begin
|
||||
if FKind = vkStreamConverter then
|
||||
Result := IStreamConverter(Pointer(FInterface))
|
||||
else
|
||||
raise EInvalidCast.Create('Value is not a StreamConverter');
|
||||
end;
|
||||
|
||||
function TDataValue.AsConsumer: IStreamConsumer;
|
||||
begin
|
||||
if FKind = vkStreamConsumer then
|
||||
Result := IStreamConsumer(Pointer(FInterface))
|
||||
else
|
||||
raise EInvalidCast.Create('Value is not a StreamConsumer');
|
||||
end;
|
||||
|
||||
// --- Existing Factories & Accessors ---
|
||||
|
||||
class function TDataValue.FromIntf<T>(const AValue: T): TDataValue;
|
||||
@@ -531,11 +447,6 @@ begin
|
||||
vkMethod: Result := '<method>';
|
||||
vkGeneric: Result := '<generic>';
|
||||
vkManagedObject: Result := 'Object: ' + AsObject.ClassName;
|
||||
|
||||
// New Stream Types
|
||||
vkStreamProducer: Result := 'StreamProducer';
|
||||
vkStreamConverter: Result := 'StreamConverter';
|
||||
vkStreamConsumer: Result := 'StreamConsumer';
|
||||
else
|
||||
Result := '[Unknown DataValue]';
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user