Copie et effacement des variants personnalisés
Remonter à Définition de variants personnalisés - Index
En plus du transtypage et de l'implémentation des opérateurs, vous devez indiquer comment copier et effacer les variants de votre type Variant personnalisé.
Pour indiquer comment copier la valeur du variant, implémentez la méthode System.Variants.TCustomVariantType.Copy. En général, c'est une opération simple, même si vous ne devez pas oublier de libérer la mémoire de toute classe ou structure utilisée pour contenir la valeur du variant.
Delphi :
procedure TComplexVariantType.Copy(var Dest: TVarData; const Source: TVarData; const Indirect: Boolean);
begin
if Indirect and VarDataIsByRef(Source) then
VarDataCopyNoInd(Dest, Source)
else
with TComplexVarData(Dest) do
begin
VType := VarType;
VComplex := TComplexData.Create(TComplexVarData(Source).VComplex);
end;
end;
- Remarque : Le paramètre
Indirect
de la méthodeCopy
signale que la copie doit prendre en compte le cas où le variant contient une référence indirecte à ses données.
- Conseil : Si votre type variant personnalisé n'alloue pas de mémoire pour contenir ses données (les données tiennent entièrement dans l'enregistrement
TVarData
), votre implémentation de la méthode Copy peut simplement appeler la méthode SimplisticCopy.
Pour indiquer comment effacer la valeur du variant, implémentez la méthode Clear. Comme avec la méthode Copy, la seule chose compliquée à faire est de libérer d'éventuelles ressources allouées pour stocker les données du variant.
Delphi:
procedure TComplexVariantType.Clear(var V: TVarData);
begin
V.VType := varEmpty;
FreeAndNil(TComplexVarData(V).VComplex);
end;
Vous aurez également besoin d'implémenter la méthode IsClear. De cette façon, vous pourrez détecter d'éventuelles valeurs incorrectes ou des valeurs spéciales qui représentent des données vides.
Delphi :
function TComplexVariantType.IsClear(const V: TVarData): Boolean;
begin
Result := (TComplexVarData(V).VComplex = nil) or
TComplexVarData(V).VComplex.IsZero;
end;