Ну а классы и дженерики тебе нафига даны.
Код:
interface
type
TMemDataType = (mdtJpeg, mdtHtml);
TMemData = class
private
FDataType : TMemDataType;
FData : TStream;
public
constructor Create(ADataType : TDataType; AData : TStream);
property DataType : TDataType read FDataType;
property Data : TStream read FData;
end;
// Если нужно что-то специфичное, то "рожаем" наследников
TJpegMemData = class(TMemData)
private
FWidth : Integer;
FHeight : Integer;
public
constructor Create(AData : TStream; AWidth, AHeight : Integer);
property Width : Integer read FWidth;
property Height : Integer read FHeight;
end;
// А тут список для хранения всего этого счастья
var
LoadedData : TObjectList<TMemData>;
implementation
constructor TMemData.Create(ADataType : TDataType; AData : TStream);
begin
inherited;
FDataType := ADataType;
FData := AData;
end;
constructor TJpegMemData.Create(AData : TStream; AWidth, AHeight : Integer);
begin
inherited Create(mdtJpeg,AData);
FWidth := AWidth;
FHeight := AHeight;
end;
// Создание и удаление глобального списка
initialization
LoadedData := TObjectList<TMemData>.Create;
finallization
FreeAndNil(LoadedData);
end.
Как то так.
Только не забыть при работе со списком обеспечить потокозащищенность.
ЗЫ. А вообще зачем хранить все в памяти, если потом идет обработка и удаление лишнего и сохранение только полезного. Может проще просто прямо в потоке проанализировать и не сохранять ничего лишнего?