[C] Doppelter Aufruf?

Darkwing1001

Cadet 2nd Year
Registriert
Aug. 2009
Beiträge
16
Ich habe in einer Funktion doppelte clear() Aufrufe gefunden. Kann ich die Duplikate am Anfang raus nehmen?

C:
void cFlatSetup::Setup(void) {
    Clear();
    Bordertypes.Clear();    // <-- Kann das weg?
    Progresstypes.Clear();  // <-- Kann das weg?

    Bordertypes.Clear();
    Bordertypes.Append( strdup(tr("none")) );
    Bordertypes.Append( strdup(tr("rect")) );
    Bordertypes.Append( strdup(tr("round")) );
    Bordertypes.Append( strdup(tr("invert round")) );
    Bordertypes.Append( strdup(tr("rect + alpha blend")) );
    Bordertypes.Append( strdup(tr("round + alpha blend")) );
    Bordertypes.Append( strdup(tr("invert round + alpha blend")) );

    Progresstypes.Clear();
    Progresstypes.Append( strdup(tr("small line + big line")) );
    Progresstypes.Append( strdup(tr("big line")) );
    Progresstypes.Append( strdup(tr("big line + outline")) );
    Progresstypes.Append( strdup(tr("small line + big line + dot")) );
    Progresstypes.Append( strdup(tr("big line + dot")) );
    Progresstypes.Append( strdup(tr("big line + outline + dot")) );
    Progresstypes.Append( strdup(tr("small line + dot")) );
    Progresstypes.Append( strdup(tr("outline + dot")) );
    Progresstypes.Append( strdup(tr("small line + big line + alpha blend")) );
    Progresstypes.Append( strdup(tr("big line + alpha blend")) );

    DiskUsages.Clear();
    DiskUsages.Append( strdup(tr("do not show")) );
    DiskUsages.Append( strdup(tr("timer & recording menu")) );
    DiskUsages.Append( strdup(tr("always on the menu")) );
    DiskUsages.Append( strdup(tr("always show")) );
...
Stammt nicht von mir. Hab nur den Kommentar oben eingefügt um die Stelle zu kennzeichnen
 
Woher sollen wir wissen was die Clear Methoden machen? Im Zweifel einfach lassen, ansonsten rein schauen und/oder testen.
 
Vermutlich ist der doppelte Aufruf tatsächlich unnötig (DiskUsages.Clear() wird immerhin auch nur einmal aufgerufen). Allerdings kann man das ohne den gesamten Kontext nicht sicher sagen.
 
  • Gefällt mir
Reaktionen: floTTes
Nun der gesamte Code ist hier zu finden: https://github.com/MegaV0lt/vdr-plugin-skinflatplus
Datei setup.c

Code:
cStringList Bordertypes;
cStringList DiskUsages;
cStringList Progresstypes;
Das .clear löscht doch einfach die Daten aus den Stringlisten?

Danke für die schneller Reaktion!
 
Darkwing1001 schrieb:
Das .clear löscht doch einfach die Daten aus den Stringlisten?
Sieht ganz danach aus (ohne reingeschaut zu haben!). Ich bin mir zu 99% sicher, dass die doppelten Aufrufe unnötig sind. Zumindest wenn der Entwickler dieses Codes Wert auf aussagekräftige Funktions- bzw. Methodennamen legt, was nebenbei bemerkt immer guter Stil ist.
 
  • Gefällt mir
Reaktionen: Darkwing1001
Frag doch einfach den Entwickler bzw. mach einfach ein Issue auf?
Achso, hab mich verguckt. Das Originalrepo ist ja im Archivmodus und ohne maintainer. Du bist vermutlich megavolt, oder?
 
  • Gefällt mir
Reaktionen: Darkwing1001
Wenn man sich das Basis-Repo, aus dem die "tools.h" imported wird, anschaut, findet man das hier:

C:
class cStringList : public cVector<char *> {
...
}

template<class T> class cVector {
  virtual void Clear(void)
  {
    for (int i = 0; i < size; i++)
        data[i] = T(0);
    size = 0;
  }
}
Quelle: Klick!

Heißt: Clear() löscht alle Elemente und setzt die size der List zurück.
 
  • Gefällt mir
Reaktionen: Darkwing1001
BeBur schrieb:
Das Originalrepo ist ja im Archivmodus und ohne maintainer. Du bist vermutlich megavolt
Richtig erkannt. Ich hab das notgedrungen "übernommen". Der Entwickler hat kein VDR mehr und sonst wollte das auch keiner machen. Mit Forenhilfe hab ich das Skin das ich selber nutze am Leben halten können.
 
  • Gefällt mir
Reaktionen: BeBur

Ähnliche Themen

Zurück
Oben