La idea es hacer una lista doblemente enlazada en memoria en la que se puede guardar cualquier cosa, y poder enlazar cada registro en memoria, con cualquier cosa (Tag de un Twincontrol, o con cada elemento de un Tstring)
Es para evitar el uso del Tstring.AddObject, ya que al usar ese método, tenemos que encargarnos de crear / liberar cada objeto y hacer un casting cada vez que queremos acceder a dicho elemento.
Estoy creando una clase que al tiempo de crearla, se debe decir el tipo de dato que va a contener, por ejemplo:
Código:
type pTMemory = record
anterior, siguiente : Pointer;
datos : TRecordFile;
end;
TListaEnlazada = class
private
FFile : File of TRecordFile ;
Fdatos: TRecordFile ;
FnumReg: Integer;
FLista : ptMemory;
FLast : ptMemory;
FnActual : Integer;
Factual : pTMemory;
FBeforeAdd:TBeforeAdd;
FAfterAdd:TAfterAdd;
FBeforeDelete: TBeforeDelete;
FAfterDelete:TAfterDelete;
public
procedure LoadFromFile(const FileName :string);
procedure SaveToFile (const FileName:string);
constructor Create;
destructor Free;
procedure Anade(Value:TrecordFile);
function AlPrimero: TRecordFile;
function AlSiguiente: TRecordFile;
function AlAnterior: TRecordFile;
function AlUltimo: TRecordFile;
function Borra(indice:Integer):Boolean;
function Mover(desde, Al :Integer):Integer;
end;
Como veis Creo un descriptor de ficheros del tipo File of TRecordFile.
Lo que quiero es que al crear la clase se pudiera hacer esto:
Código:
L := TLIstaEnlazada.Create(TRecordFile);
Haciendo independiente la clase del tipo de registro usado.
¿Se puede hacer?
Gracias infinitas por vuestra ayuda