[erledigt] Frage bzgl. Funktion (Rückgabewert negieren)

Zusatz-Programme für Receiver der 5000er und 6000er Serie.

Hier geht's um alles, was mit den TAP Anwendungen für den PVR5x00/6000 zu tun hat.
Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

[erledigt] Frage bzgl. Funktion (Rückgabewert negieren)

#1

Beitrag von Elle4u » So 23. Sep 2007, 10:48

Hallo,

ich habe für die Sortierung immer zwei Funktionen.

z.B.

Code: Alles auswählen

bool CompareDate( tItem *pData1, tItem *pData2 )
{
  return( FileDB [pData1->FileDBIndex].Date < FileDB [pData2->FileDBIndex].Date );
}


bool CompareDateReverse( tItem *pData1, tItem *pData2 )
{
  return( FileDB [pData2->FileDBIndex].Date < FileDB [pData1->FileDBIndex].Date );
}
oder

Code: Alles auswählen

bool CompareDuration( tItem *pData1, tItem *pData2 )
{
  return( FileDB [pData2->FileDBIndex].Duration > FileDB [pData1->FileDBIndex].Duration );
}


bool CompareDurationReverse( tItem *pData1, tItem *pData2 )
{
  return( FileDB [pData1->FileDBIndex].Duration > FileDB [pData2->FileDBIndex].Duration );
}

Jetzt finde ich es eigentlich Quatsch das selbe 2x zu schreiben (ein Sortierung kann ja auch mal etwas komplexer werden) und dachte mir, dass ich ja einfach einen bool mit übergeben kann ob Reverse oder nicht.

Code: Alles auswählen

bool CompareDuration( tItem *pData1, tItem *pData2, bool Reverse )
Jetzt muss ich ja nur den Rückgabewert genau negieren, wenn Reverse = TRUE.


Frage nun:
Geht das irgendwie einfacher, als es in eine if zu packen? Weil so kann ich es ja direkt 2x schreiben...

Code: Alles auswählen

  if (!Reverse) return( FileDB [pData1->FileDBIndex].Duration > FileDB [pData2->FileDBIndex].Duration );
  else          return( FileDB [pData2->FileDBIndex].Duration > FileDB [pData1->FileDBIndex].Duration );
oder

Code: Alles auswählen

  ret = ( FileDB [pData1->FileDBIndex].Duration > FileDB [pData2->FileDBIndex].Duration );

  if (!Reverse) return( ret );
  else          return( !ret );
Also evtl. durch &&-Verknüpfung?
Gruß,
Elle4u

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#2

Beitrag von Elle4u » So 23. Sep 2007, 18:32

[quote=""Elle4u""]Also evtl. durch &&-Verknüpfung?[/quote]

Keiner eine bessere Idee?

Dann werde ich es nämlich wie in meinem letzten Beispiel machen...
Gruß,
Elle4u

astrogator
Neuling
Neuling
Beiträge: 4
Registriert: So 23. Sep 2007, 20:58

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#3

Beitrag von astrogator » So 23. Sep 2007, 21:06

sorry, falscher Hinweis

Gruß
Ralf
Zuletzt geändert von astrogator am So 23. Sep 2007, 21:31, insgesamt 1-mal geändert.

Benutzeravatar
asrael
Bootsmann
Bootsmann
Beiträge: 1407
Registriert: Mo 12. Dez 2005, 09:11
Receivertyp: SRP2401CI+ Eco
TF5500PVR mit Samsung HD103UI/Equip (im Ruhestand)
Receiverfirmware: 1.03.00 2015/03/24
03.01.2007 PTFDeSUUuEWfUaGmTs_aXeL
Wohnort: Oldenburg

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#4

Beitrag von asrael » So 23. Sep 2007, 21:14

[quote=""Elle4u""]
Jetzt muss ich ja nur den Rückgabewert genau negieren, wenn Reverse = TRUE.
[/quote]

Achtung, das stimmt nicht ganz. Dein Code verhält sich jetzt anders im Falle der Gleichheit der beiden Daten (das Gegenteil von < ist eben >= und nicht >). Du musst prüfen, ob das einen Unterschied für Deine Algorithmen macht.

Ohne IF:

Code: Alles auswählen

  ret = ( FileDB [pData1->FileDBIndex].Duration > FileDB [pData2->FileDBIndex].Duration );
 
  return !Reverse && ret || Reverse && !ret;

Mit freundlichen Grüßen

asrael
SRP2401CI+ Eco: TAPs aktuell im Test

TF5500PVR (FW: 03.01.2007 PTFDeSUUuEWfUaGmTsXl) mit Samsung HD103UI, Equip Adapter
TAP im Autostart: Bootmenu 0.33
Durch dieses nachgeladen: Normalerweise: TAP Commander, NiceDisplay, Standby, ImproBox, PiP, Fastskip, Stirf, iTiNa, Overfly, Filer2, TSBProtector, Goldfish. Bei Bedarf: Radiotext, acadelog, TopfAMP, MediaManager, PowerRestore, ScreenCapture_OSD, HDDInfo, MiniMax, Snake, poker, sudoko, SimpleCharEditor, filer1.20.

Benutzeravatar
Homer
ToppiHolic gefährdet
ToppiHolic gefährdet
Beiträge: 9736
Registriert: Sa 11. Mär 2006, 12:08
Receivertyp: TF5200PVRc (seit 25. März 2006) CRP-2401CI+ (seit 26. Mai 2011) Uno 4K
Receiverfirmware: Dec 06 2006,
Mar 9 2011
Wohnort: 669..
Kontaktdaten:

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#5

Beitrag von Homer » So 23. Sep 2007, 21:37

[quote=""asrael""]

Code: Alles auswählen

  return !Reverse && ret || Reverse && !ret;
[/quote]
Das sollte mit XOR auch einfacher gehen:

Code: Alles auswählen

  return Reverse ^ ret;
Viele Grüße
Homer
rettet-das-freetv.de Project Euler 2401 Urban Priol ist ein smarter Androide und kann keine TAPs.

TF5200PVRc (HA250JC)
TAPs: BootMenu - UsbAccelerator - [thread=49960]acaderc_5k[/thread] - RemoteSwitch - Automove V1.9 final [90] (18.04.2008) - TF5000Display - 3PG - IdleHDD

CRP-2401CI+ (ST3500312CS,MZ-75E500B)
TAPs: XStartTap_TMS - AutoReboot - RemoteSwitch_TMS - RescueRecs - SmartEPG_TMS - RebuildNAV - Automove V2.0 beta 13 (24.05.2011) - StartFTPd - TMSRemote - NiceDisplay

KabelBW Unitymedia (free to air)

Benutzeravatar
asrael
Bootsmann
Bootsmann
Beiträge: 1407
Registriert: Mo 12. Dez 2005, 09:11
Receivertyp: SRP2401CI+ Eco
TF5500PVR mit Samsung HD103UI/Equip (im Ruhestand)
Receiverfirmware: 1.03.00 2015/03/24
03.01.2007 PTFDeSUUuEWfUaGmTs_aXeL
Wohnort: Oldenburg

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#6

Beitrag von asrael » So 23. Sep 2007, 22:00

[quote=""Homer""]Das sollte mit XOR auch einfacher gehen:

Code: Alles auswählen

  return Reverse ^ ret;
Viele Grüße
Homer[/quote]

Stimmt, wir sind ja in C.

Dann braucht man noch nicht einmal den Zwischenwert ret, sondern kann da direkt den Ausdruck (geklammert!) hinsetzen. Kurz genug, Elle? :lol:

Mit freundlichen Grüßen

asrael
SRP2401CI+ Eco: TAPs aktuell im Test

TF5500PVR (FW: 03.01.2007 PTFDeSUUuEWfUaGmTsXl) mit Samsung HD103UI, Equip Adapter
TAP im Autostart: Bootmenu 0.33
Durch dieses nachgeladen: Normalerweise: TAP Commander, NiceDisplay, Standby, ImproBox, PiP, Fastskip, Stirf, iTiNa, Overfly, Filer2, TSBProtector, Goldfish. Bei Bedarf: Radiotext, acadelog, TopfAMP, MediaManager, PowerRestore, ScreenCapture_OSD, HDDInfo, MiniMax, Snake, poker, sudoko, SimpleCharEditor, filer1.20.

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#7

Beitrag von Elle4u » So 23. Sep 2007, 22:28

[quote=""asrael""]Kurz genug, Elle? :lol: [/quote]

Danke, das müsste es wirklich sein :hello:

Ich hatte mir zwar extra noch die verschiedenen Bool-Operationen angeschaut, aber es irgendwie übersehen ;) :

Code: Alles auswählen

XOR (Exclusive Or)
This operation is performed between two bits (a and b).
The result is 1 if either one of the two bits is 1, but not in the case that both are.
There for, if neither or both of them are equal to 1 the result is 0.

XOR (^)
a	b	a^b
0	0	0
0	1	1
1	0	1
1	1	0
Gruß,
Elle4u

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#8

Beitrag von Elle4u » So 23. Sep 2007, 22:56

[quote=""Elle4u""]Danke, das müsste es wirklich sein :hello: [/quote]

Klasse :cry:

Jetzt habe ich alle Funktionen geändert, aber dann funktioniert das Compilieren nicht mehr.
Andere Routinen (z.B. QuickSort) arbeiten mit einem Verweis:

Code: Alles auswählen

compareFnc              *pCompare;
Und das ist definiert mit

Code: Alles auswählen

typedef bool (compareFnc) (tItem *, tItem *);
Leider fehlt mir dort der weitere Durchblick, um das zu beheben...
Gruß,
Elle4u

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28954
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

AW: [erledigt] Frage bzgl. Funktion (Rückgabewert negieren)

#9

Beitrag von FireBird » So 23. Sep 2007, 23:31

Wenn Du bei allen Vergleichsfunktionen einen 3. Parameter definiert hast, musst Du den hier auch angeben.

Code: Alles auswählen

typedef bool (compareFnc) (tItem *, tItem *, bool);

Benutzeravatar
asrael
Bootsmann
Bootsmann
Beiträge: 1407
Registriert: Mo 12. Dez 2005, 09:11
Receivertyp: SRP2401CI+ Eco
TF5500PVR mit Samsung HD103UI/Equip (im Ruhestand)
Receiverfirmware: 1.03.00 2015/03/24
03.01.2007 PTFDeSUUuEWfUaGmTs_aXeL
Wohnort: Oldenburg

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#10

Beitrag von asrael » Mo 24. Sep 2007, 09:12

[quote=""Elle4u""]Andere Routinen (z.B. QuickSort) arbeiten mit einem Verweis:
[/quote]

Die eigentliche Frage hat ja schon FireBird beantwortet, aber ...

Arbeitest Du jetzt doch mit QuickSort?

Mit freundlichen Grüßen

asrael
SRP2401CI+ Eco: TAPs aktuell im Test

TF5500PVR (FW: 03.01.2007 PTFDeSUUuEWfUaGmTsXl) mit Samsung HD103UI, Equip Adapter
TAP im Autostart: Bootmenu 0.33
Durch dieses nachgeladen: Normalerweise: TAP Commander, NiceDisplay, Standby, ImproBox, PiP, Fastskip, Stirf, iTiNa, Overfly, Filer2, TSBProtector, Goldfish. Bei Bedarf: Radiotext, acadelog, TopfAMP, MediaManager, PowerRestore, ScreenCapture_OSD, HDDInfo, MiniMax, Snake, poker, sudoko, SimpleCharEditor, filer1.20.

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#11

Beitrag von Elle4u » Mo 24. Sep 2007, 13:34

[quote=""FireBird""]Wenn Du bei allen Vergleichsfunktionen einen 3. Parameter definiert hast, musst Du den hier auch angeben.

Code: Alles auswählen

typedef bool (compareFnc) (tItem *, tItem *, bool);
[/quote]
Leider verwende ich unterschiedliche.
Ich könnte natürlich einfach alle Funktionen mit dem bool ergänzen, auch wenn dies gar nicht genutzt wird.

[quote=""asrael""]Die eigentliche Frage hat ja schon FireBird beantwortet, aber ...

Arbeitest Du jetzt doch mit QuickSort?[/quote]

Ähhh. Öhhhh. Die Funktion heißt zumindest mal so :oops: (siehe Quellcode).
Keine Ahnung, wer mir das mal eingebaut hat...
Gruß,
Elle4u

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28954
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

AW: Frage bzgl. Funktion (Rückgabewert negieren)

#12

Beitrag von FireBird » Mo 24. Sep 2007, 16:10

[quote=""Elle4u""]Leider verwende ich unterschiedliche.
Ich könnte natürlich einfach alle Funktionen mit dem bool ergänzen, auch wenn dies gar nicht genutzt wird.[/quote]
Richtig, Du musst sie nicht unbedingt verwenden, aber die Parameter aller Funktionen müssen auf jeden Fall gleich sein.

Benutzeravatar
Erdnussnase
TAP-Guru
TAP-Guru
Beiträge: 7067
Registriert: Fr 9. Dez 2005, 12:01

AW: [erledigt] Frage bzgl. Funktion (Rückgabewert negieren)

#13

Beitrag von Erdnussnase » Mo 24. Sep 2007, 19:05

Es wäre auch anders gegangen, indem Du Deine eigentlich Suchfunktion anders benennst:

z.B.

Code: Alles auswählen

bool CompareDateForBoth( tItem *pData1, tItem *pData2 )
{
  return( FileDB [pData1->FileDBIndex].Date < FileDB [pData2->FileDBIndex].Date );
}
und die Alten Namen in einem Header mit

Code: Alles auswählen

#define  CompareDate(a,b)   CompareDateForBoth(a,b)
#define  CompareDateReverse(a,b)  CompareDateForBoth(b,a)
auf die Neue umlenkst.

Das erspart Dir den dritten Parameter und bringt ganz, ganz, ganz.... leichte Laufzeitvorteile. Nur mögen einige Programmierer diesen Stil nicht.

P.S.
Statt der Defines kann man auch in den alten Funktionen auf die Neuen umlenken und dabei für Reverse die Parameter tauschen.

Code: Alles auswählen

bool CompareDateForBoth( tItem *pData1, tItem *pData2 )
{
  return( FileDB [pData1->FileDBIndex].Date < FileDB [pData2->FileDBIndex].Date );
}

bool CompareDate( tItem *pData1, tItem *pData2 ) { return CompareDateForBoth( pata1, pData2 ); }

bool CompareDateReverse( tItem *pData1, tItem *pData2 ) { return CompareDateForBoth( pata2, pData1 ); }
:type: ->.....
Kein Support oder Fragen zur Registrierung per PN !
http://www.iTiNa.de
?Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit,
aber bei dem Universum bin ich mir noch nicht ganz sicher.?
Albert Einstein

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

AW: [erledigt] Frage bzgl. Funktion (Rückgabewert negieren)

#14

Beitrag von Elle4u » Mo 24. Sep 2007, 20:35

Ich möchte mich hiermit noch einmal bei allen bedanken, welche mir hier so tolle Antworten geliefert haben. :hello:

Ich werde mal schauen, was ich davon am einfachsten in den Sourcen umsetzten kann. :wink:

Danke!
Gruß,
Elle4u

Benutzeravatar
ibbi
Moderierter Ignorator Bitteschöööön!
Moderierter Ignorator  <font color=#E9E9E9>Bitteschöööön!</font>
Beiträge: 7110
Registriert: Fr 9. Dez 2005, 12:49
Receivertyp: TF5000PVR • SRP-2401CI+ Eco
Receiverfirmware: Sep 2005 PHTF • Jan 2015

AW: [erledigt] Frage bzgl. Funktion (Rückgabewert negieren)

#15

Beitrag von ibbi » Di 25. Sep 2007, 00:56

Eigentlich wollte ich mich hier nicht einmischen, aber wenn man auf Performance aus ist, kippt man die Reverse-Geschichte ganz, sortiert nur nur auf eine Art und gibt die andere einfach über eine rückläufige Schleife aus.
Power Restore 0.8 | PiP 1.2 | 1.1v | QuickTimer 1.0.3 (IB) | TF5000 Display 1.53 | dbPlay 1.2 | Auto Resume 1.30 | IdleHdd 1.0 | EPPG 2.0 | WWWW 0.1b
(Kanalarbeiter 0.9, RecRepair 0.4, ScanDisk 1.4, ScreenCapture with OSD 3.1)


Power Restore 0.8 | EasyTimer 1.0 | EPPG 2.0 | 1.1v
(telnetd 1.0, TMSRemote 4.6)

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

AW: [erledigt] Frage bzgl. Funktion (Rückgabewert negieren)

#16

Beitrag von Elle4u » Di 25. Sep 2007, 05:55

[quote=""ibbi""]Eigentlich wollte ich mich hier nicht einmischen, aber wenn man auf Performance aus ist, kippt man die Reverse-Geschichte ganz, sortiert nur nur auf eine Art und gibt die andere einfach über eine rückläufige Schleife aus.[/quote]

Also Performance war mir dabei eigentlich egal. :D :

Das mit Deinem Vorschlag geht leider nicht, da innerhalb der Liste mehrere Sortierungen vorliegen. Verzeichnisse und Dateien. Und die Verzeichnisse können dann sogar noch oben oder unten in der Liste stehen :X

Aber trotzdem danke für den Vorschlag.
Gruß,
Elle4u

Antworten

Zurück zu „TF 5x00/6000 PVR TAP“