Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (*Uma classe simples para poder abstrair uma forma de Iteração com um Tipo enumerado qualquer
- passando um tipo qualquer. Foi adicionado um suporte a Interface para que você não
- se preocupe com o destructor do object
- ex.: type TDrivers = (Driver1,Driver2,Driver3,Driver4);
- private
- { Private declarations }
- FDrivers: IEnum<TDrivers,TArray<String>>;
- public
- { Public declarations }
- .....
- implementation
- Um exemplo passando valores como um JsonString
- FDrivers := TEnum<TDrivers,TArray<String>>
- .Create([TJsonObject.create.addPair('Driver','Driver de comunicação Firedac').ToString,
- TJsonObject.create.addPair('Driver','Driver de comunicação IBX').ToString,
- TJsonObject.create.addPair('Driver','Driver de comunicação ZEUS').ToString,
- TJsonObject.create.addPair('Driver','Driver de comunicação GENERICO').ToString]);
- FDrivers.&Set(Driver4);
- Pegando um Retorno
- Memo1.Lines.Add( FDrivers.&To );
- *)
- unit System.Enumerates.Controller;
- interface
- uses System.SysUtils;
- Type TGArray = TArray<Variant>;
- type IEnum<T: Record;TGArray> = Interface
- ['{C9038BE7-B224-43DE-8C5A-CD4E59184F9A}']
- function &To:Variant;
- function &Set(Arg: T):T;
- End;
- type TEnum<T: Record;TGArray> = class(TInterfacedObject,IEnum<T,TGArray>)
- strict private
- FArray: TGArray;
- FGenericType: T;
- FIntegerType: Byte;
- public
- function &To:Variant;
- function &Set(Arg: T):T;
- constructor Create(Arg: TArray<Variant>);
- end;
- implementation
- { TEnum<T, TArray> }
- function TEnum<T, TGArray>.&Set(Arg: T): T;
- begin
- FGenericType := Arg;
- FintegerType:= PCardinal(@Arg)^;
- Result := FGenericType;
- end;
- constructor TEnum<T, TGArray>.Create( Arg: TArray<Variant>);
- begin
- FArray := Arg;
- end;
- function TEnum<T, TGArray>.&To: Variant;
- begin
- if getTypeKind(FGenericType) = tkEnumeration then
- begin
- Result := FArray[FintegerType];
- end else
- raise Exception.Create('O Tipo não é um Enumerado');
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement