unit XData.Types.Map;

interface

uses
  Generics.Collections, System.TypInfo, System.SysUtils,
  XData.Model.Classes;

type
  TXDataTypeMap = TDictionary<PTypeInfo, TXDataType>;

procedure FillDefaultTypes(Map: TXDataTypeMap);

implementation

uses
  XData.Model.Types;

procedure FillDefaultTypes(Map: TXDataTypeMap);
var
  Defaults: TXDataPrimitiveTypes;
begin
  Defaults := TXDataPrimitiveTypes.Instance;

  // Integer types
  Map.AddOrSetValue(TypeInfo(Integer), Defaults.Int32Type);
  Map.AddOrSetValue(TypeInfo(Longint), Defaults.Int32Type);
  Map.AddOrSetValue(TypeInfo(Cardinal), Defaults.Int64Type);
  Map.AddOrSetValue(TypeInfo(Longword), Defaults.Int64Type);
  Map.AddOrSetValue(TypeInfo(Word), Defaults.Int32Type);
  Map.AddOrSetValue(TypeInfo(Shortint), Defaults.Int16Type);
  Map.AddOrSetValue(TypeInfo(Byte), Defaults.Int16Type);
  Map.AddOrSetValue(TypeInfo(SmallInt), Defaults.Int16Type);
  Map.AddOrSetValue(TypeInfo(Int64), Defaults.Int64Type);

  // Boolean types
  Map.AddOrSetValue(TypeInfo(Boolean), Defaults.BooleanType);

  // Float types
  Map.AddOrSetValue(TypeInfo(Double), Defaults.DoubleType);
  Map.AddOrSetValue(TypeInfo(Real), Defaults.DoubleType);
  Map.AddOrSetValue(TypeInfo(Single), Defaults.DoubleType);
  Map.AddOrSetValue(TypeInfo(Extended), Defaults.DoubleType);
  Map.AddOrSetValue(TypeInfo(Currency), Defaults.CurrencyType);

  // Date time types
  Map.AddOrSetValue(TypeInfo(TDateTime), Defaults.DateTimeType);
  Map.AddOrSetValue(TypeInfo(TDate), Defaults.DateType);
  Map.AddOrSetValue(TypeInfo(TTime), Defaults.TimeType);

  // Blob types
  Map.AddOrSetValue(TypeInfo(TBytes), Defaults.BinaryType);
  Map.AddOrSetValue(TypeInfo(TArray<byte>), Defaults.BinaryType);

  // String types
  Map.AddOrSetValue(TypeInfo(string), Defaults.StringType);
  {$IFNDEF NEXTGEN}
  Map.AddOrSetValue(TypeInfo(AnsiString), Defaults.StringType);
  Map.AddOrSetValue(TypeInfo(WideString), Defaults.StringType);
  {$ENDIF}

  // Char types
  Map.AddOrSetValue(TypeInfo(Char), Defaults.StringType);
  {$IFNDEF NEXTGEN}
  Map.AddOrSetValue(TypeInfo(AnsiChar), Defaults.StringType);
  Map.AddOrSetValue(TypeInfo(WideChar), Defaults.StringType);
  {$ENDIF}

  // Guid types
  Map.AddOrSetValue(TypeInfo(TGuid), Defaults.GuidType);

  // Variant
  Map.AddOrSetValue(TypeInfo(Variant), Defaults.VariantType);
end;

end.
