unit Myc.Data.Types.Void; interface uses System.SysUtils, Myc.Data.Types; type // Implements a singleton data value representing void. TImplDataVoidValue = class(TInterfacedObject, IDataVoidValue) private class var FSingleton: IDataVoidValue; class constructor CreateSingleton; public // IDataValue function GetDataType: IDataType; function GetAsString: string; class property Singleton: IDataVoidValue read FSingleton; end; // Implements a singleton data type representing void. TImplDataVoidType = class(TInterfacedObject, IDataVoidType) private class var FSingleton: IDataVoidType; class constructor CreateSingleton; public // IDataType function GetName: String; function GetKind: TDataKind; // IDataVoidType function GetValue: IDataVoidValue; class property Singleton: IDataVoidType read FSingleton; end; implementation class constructor TImplDataVoidValue.CreateSingleton; begin // Singleton instance created for the void value FSingleton := TImplDataVoidValue.Create; end; function TImplDataVoidValue.GetAsString: string; begin Result := '(void)'; end; function TImplDataVoidValue.GetDataType: IDataType; begin Result := TImplDataVoidType.Singleton; end; { TImplDataVoidType } function TImplDataVoidType.GetValue: IDataVoidValue; begin Result := TImplDataVoidValue.Singleton; end; class constructor TImplDataVoidType.CreateSingleton; begin // Singleton instance created for the void type FSingleton := TImplDataVoidType.Create; end; function TImplDataVoidType.GetKind: TDataKind; begin Result := dkVoid; end; function TImplDataVoidType.GetName: String; begin Result := 'Void'; end; end.