Refactoring Keyword mapping, introducing tuples
This commit is contained in:
@@ -629,7 +629,7 @@ begin
|
||||
idx := baseType.Definition.IndexOf(M.Member.Value);
|
||||
if idx >= 0 then
|
||||
begin
|
||||
var fieldType := TTypes.FromScalarKind(baseType.Definition.Items[idx].Value);
|
||||
var fieldType := TTypes.FromScalarKind(baseType.Definition[idx]);
|
||||
if baseType.Kind = stRecordSeries then
|
||||
resType := TTypes.CreateSeries(fieldType)
|
||||
else
|
||||
@@ -819,7 +819,7 @@ begin
|
||||
var def := streamType.Definition;
|
||||
var idx := def.IndexOf(sel.Value);
|
||||
if idx >= 0 then
|
||||
inferredType := TTypes.FromScalarKind(def.Items[idx].Value);
|
||||
inferredType := TTypes.FromScalarKind(def[idx]);
|
||||
end
|
||||
else if streamType.Kind = stSeries then
|
||||
begin
|
||||
|
||||
@@ -343,7 +343,7 @@ begin
|
||||
SetLength(vals, rs.Def.Count);
|
||||
var i64 := idx.AsScalar.Value.AsInt64;
|
||||
for var k := 0 to rs.Def.Count - 1 do
|
||||
vals[k] := rs.Fields[rs.Def.Items[k].Key].Items[Integer(i64)].Value;
|
||||
vals[k] := rs.Fields[rs.Def.Keywords[k]].Items[Integer(i64)].Value;
|
||||
Result := TDataValue.FromScalarRecord(TScalarRecord.Create(rs.Def, vals));
|
||||
end
|
||||
else
|
||||
@@ -360,7 +360,7 @@ begin
|
||||
case base.Kind of
|
||||
vkRecordSeries: Result := TDataValue.FromSeries(base.AsRecordSeries.Fields[N.Member.Value]);
|
||||
vkScalarRecord: Result := TDataValue(base.AsScalarRecord.Fields[N.Member.Value]);
|
||||
vkGenericRecord: Result := TDataValue(base.AsGenericRecord.Fields[N.Member.Value]);
|
||||
vkRecord: Result := TDataValue(base.AsRecord.Fields[N.Member.Value]);
|
||||
vkStream: Result := TDataValue.FromSeries(base.AsStream.Series.Fields[N.Member.Value]);
|
||||
else
|
||||
raise EEvaluatorException.Create('Member error');
|
||||
@@ -442,7 +442,7 @@ begin
|
||||
begin
|
||||
var key := selectors[k].Value;
|
||||
var idx := srcDef.IndexOf(key);
|
||||
config[i][k] := TScalarRecordField.Create(key, srcDef.Items[idx].Value);
|
||||
config[i][k] := TScalarRecordField.Create(key, srcDef[idx]);
|
||||
end;
|
||||
end;
|
||||
lambdaFunc := Visit(N.Transformation).AsMethod();
|
||||
@@ -461,8 +461,8 @@ begin
|
||||
if res.IsVoid then
|
||||
exit(False);
|
||||
var rec := res.AsScalarRecord;
|
||||
for k := 0 to rec.Def.Count - 1 do
|
||||
R[k] := rec.Items[k].Value.Value;
|
||||
for k := 0 to rec.Count - 1 do
|
||||
R[k] := rec.Items[k].Value;
|
||||
Result := True;
|
||||
end;
|
||||
Result := TDataValue.FromStream(TPipeStream.Create(config, outputDef, sources, pipeAdapter));
|
||||
|
||||
+10
-19
@@ -646,7 +646,7 @@ begin
|
||||
|
||||
for i := 0 to Self.FDefinition.Count - 1 do
|
||||
begin
|
||||
if (Self.FDefinition[i].Key <> otherDef[i].Key) or (Self.FDefinition[i].Value <> otherDef[i].Value) then
|
||||
if (Self.FDefinition.Keywords[i] <> otherDef.Keywords[i]) or (Self.FDefinition[i] <> otherDef[i]) then
|
||||
exit(False);
|
||||
end;
|
||||
|
||||
@@ -656,7 +656,6 @@ end;
|
||||
function TRecordType.GetHashCode: Integer;
|
||||
var
|
||||
i, h: Integer;
|
||||
field: TPair<IKeyword, TScalar.TKind>;
|
||||
begin
|
||||
// Seed with Kind
|
||||
Result := THashBobJenkins.GetHashValue(FKind, SizeOf(TStaticTypeKind), 0);
|
||||
@@ -665,15 +664,13 @@ begin
|
||||
begin
|
||||
for i := 0 to FDefinition.Count - 1 do
|
||||
begin
|
||||
field := FDefinition[i];
|
||||
|
||||
// Hash Key
|
||||
// Keyword identities are unique by pointer, but let's hash their internal ID/Index for safety
|
||||
h := field.Key.Idx;
|
||||
h := FDefinition.Keywords[i].Idx;
|
||||
Result := THashBobJenkins.GetHashValue(h, SizeOf(Integer), Result);
|
||||
|
||||
// Hash Field Type Kind
|
||||
h := Ord(field.Value);
|
||||
h := Ord(FDefinition[i]);
|
||||
Result := THashBobJenkins.GetHashValue(h, SizeOf(Integer), Result);
|
||||
end;
|
||||
end;
|
||||
@@ -682,15 +679,13 @@ end;
|
||||
function TRecordType.ToString: string;
|
||||
var
|
||||
i: Integer;
|
||||
field: TPair<IKeyword, TScalar.TKind>;
|
||||
begin
|
||||
Result := GetKind.ToString + '{';
|
||||
if Assigned(FDefinition) then
|
||||
begin
|
||||
for i := 0 to FDefinition.Count - 1 do
|
||||
begin
|
||||
field := FDefinition[i];
|
||||
Result := Result + field.Key.Name + ': ' + field.Value.ToString;
|
||||
Result := Result + FDefinition.Keywords[i].Name + ': ' + FDefinition[i].ToString;
|
||||
if i < FDefinition.Count - 1 then
|
||||
Result := Result + ', ';
|
||||
end;
|
||||
@@ -746,7 +741,7 @@ begin
|
||||
for i := 0 to Self.FDefinition.Count - 1 do
|
||||
begin
|
||||
// Deep Check of Field Types
|
||||
if (Self.FDefinition[i].Key <> otherDef[i].Key) or (not Self.FDefinition[i].Value.IsEqual(otherDef[i].Value)) then
|
||||
if (Self.FDefinition.Keywords[i] <> otherDef.Keywords[i]) or (not Self.FDefinition[i].IsEqual(otherDef[i])) then
|
||||
exit(False);
|
||||
end;
|
||||
|
||||
@@ -756,7 +751,6 @@ end;
|
||||
function TGenericRecordType.GetHashCode: Integer;
|
||||
var
|
||||
i, h: Integer;
|
||||
field: TPair<IKeyword, IStaticType>;
|
||||
begin
|
||||
h := Ord(stGenericRecord);
|
||||
Result := THashBobJenkins.GetHashValue(h, SizeOf(TStaticTypeKind), 0);
|
||||
@@ -765,16 +759,15 @@ begin
|
||||
begin
|
||||
for i := 0 to FDefinition.Count - 1 do
|
||||
begin
|
||||
field := FDefinition[i];
|
||||
|
||||
// Hash Key (using Idx)
|
||||
h := field.Key.Idx;
|
||||
h := FDefinition.Keywords[i].Idx;
|
||||
Result := THashBobJenkins.GetHashValue(h, SizeOf(Integer), Result);
|
||||
|
||||
// Hash Value Type
|
||||
if Assigned(field.Value) then
|
||||
var val := FDefinition[i];
|
||||
if Assigned(val) then
|
||||
begin
|
||||
h := field.Value.GetHashCode;
|
||||
h := val.GetHashCode;
|
||||
Result := THashBobJenkins.GetHashValue(h, SizeOf(Integer), Result);
|
||||
end;
|
||||
end;
|
||||
@@ -784,15 +777,13 @@ end;
|
||||
function TGenericRecordType.ToString: string;
|
||||
var
|
||||
i: Integer;
|
||||
field: TPair<IKeyword, IStaticType>;
|
||||
begin
|
||||
Result := GetKind.ToString + '{';
|
||||
if Assigned(FDefinition) then
|
||||
begin
|
||||
for i := 0 to FDefinition.Count - 1 do
|
||||
begin
|
||||
field := FDefinition[i];
|
||||
Result := Result + field.Key.Name + ': ' + field.Value.ToString;
|
||||
Result := Result + FDefinition.Keywords[i].Name + ': ' + FDefinition[i].ToString;
|
||||
if i < FDefinition.Count - 1 then
|
||||
Result := Result + ', ';
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user