Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

Record komplett oder nur teilwese kopieren?

  Alt 29. Apr 2004, 15:29
Hallo,

Wer keine Lust hat sich die hintergründe durch zu lesen kann gleich bis zum Source: "Variante1:" scrollen

ich steh vor nem kleinen Problem. Es schreib an einer MusicSoftware die mehrere Playlisten hat. Wenn ein Lied gespielt wurde soll dies natürlich in allen Listen angezeigt werden und nicht nur in der wo es gespielt wurde.

Deswegen hab ich eine Hauptplayliste und viele Normale Playlisten welche auf die Hauptplayliste verweisen.

Wird ein neues Lied zu irgend einer Playliste hinzugefügt, wird es nur in der Hauptplayliste erstellt. In der eigentlichen Playliste wird dann der gleiche Record angelegt und die Items darin zeigen dann auf die Items der Hauptliste (siehe sourceschnipsel)

Delphi-Quellcode:
  PBoolean = ^Boolean;
  PString = ^String;
  PInteger = ^Integer;

  TJBFileInfo = record
    Filename: String;
    FilenameP: PString; //in Hauptliste zeigts auf Filename - In normaler Liste zeigts auf Filename von Hauptliste
    Interpret: String;
    InterpretP: PString;
    Title: String;
    TitleP: PString;
    Genre: String;
    GenreP: PString;
    FileTime: Integer;
    FileTimeP: PInteger;
    AddedBySearch: Boolean;
    AllreadyPlayed: Boolean;
    AllreadyPlayedP: PBoolean;
    IsSelected: Boolean; //legt fest ob das Item selectiert ist oder nicht (deswegen geht auch nicht ein Pointer auf den gesamten Record)
  end;
Nun zum eigentlichen Problem. Wenn ich ein Lied aus irgend einer Playliste in eine andere kopiere, ist es ja das einfachste einfach das Item(den Record) aus der Hauptliste zu kopieren.
Dabei würden ja aber auch die Strings und alles mit kopiert werden (ich brauch aber nur die Pointer). Soll ich nun jeden Pointer einzeln kopieren oder den gesamten record?

Variante1:
Delphi-Quellcode:
procedure CopieItem(AItem: TJBFileInfo);
var NewItem: TJBFileInfo;
begin
  NewItem := AItem;
  {NewItem zu Playliste hinzufügen}
end;

Variante2:
Delphi-Quellcode:
procedure CopieItem(AItem: TJBFileInfo);
var NewItem: TJBFileInfo;
begin
  NewItem.FilenameP := AItem.FilenameP;
  NewItem.InterpretP : AItem.InterpretP;
  NewItem.TitleP : AItem.TitleP;
  NewItem.GenreP : AItem.GenreP;
  NewItem.FileTimeP : AItem.FiletimeP;
  NewItem.AllreadyPlayedP : AItem.AllreadyPlayedP;
  {NewItem zu Playliste hinzufügen}
end;
Welche Variante würded ihr nehmen Wenn ihr nur die Pointer aus dem Record braucht?
Variante1 = Mehr speicherverbrauch
Variante2 = Mehr zuweisungen

Oder gibts noch ne dritte effektivere Variante?

(keine Kommentare zu "PString = ^String;" - ich weiß selbst das dies ein pointer auf einen Pointer ist)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat