Thema: Delphi Slicing for Delphi™

Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Slicing for Delphi™

  Alt 24. Mär 2009, 18:46
Interessant!
Ich würde das mit dem Dekorator Design-Pattern lösen.
Dazu leitet man von TStrings ab und muss dann natürlich alle virtuellen (und abstrakten) Methoden überschreiben.
Dabei leitet man die Methoden nur auf das TStrings-Objekt weiter, dass im Konstruktor übergeben wurde.
Delphi-Quellcode:
TSlicedStrings = class(TStrings)
private
   FStrings : TStrings;
   function GetSlice(const Range: string): TStrings;
   //procedure SetStrings(Slice: string; const Value: TStrings);
public
   constructor Create(AStrings:TStrings);
   function Add(const S: string): Integer; override;

   property Slice[const Range: string]: TStrings read GetStrings;
   property Slice[fromIdx,toIdx:Integer]:TStrings; // 2. Variante
end;
constructor TSlicedStrings.Create(AStrings:TStrings);
begin
  inherited Create;
  FStrings := AStrings;
end;
function TSlicedStrings.Add(const S: string): Integer; override;
begin
  Result := FStrings.Add(S); // einfach auf internes Objekt umleiten
end;


function TSlicedStrings.GetSlice(const Range: string): TStrings;
var
  i,j : Integer;
begin
  Result := TStringList.Create;
  case Pos(':', Range) of
    0:
    begin
      j := StrToInt(Range);
       Result.AddObject(Strings[j], Objects[j]);
    end
    else begin
      for i in GetIntArrayFromSlice(Range, Count - 1) do
        Result.AddObject(Strings[i], Objects[i]);
    end;
  end;
end;
Andreas
  Mit Zitat antworten Zitat