delegeer.c

Abstracte functiewijzers in C
Download nu

delegeer.c Rangschikking & Samenvatting

Advertentie

  • Rating:
  • Vergunning:
  • Other/Proprietary Li...
  • Prijs:
  • FREE
  • Naam uitgever:
  • William Ahern
  • Uitgever website:
  • http://25thandclement.com/~william/projects/

delegeer.c Tags


delegeer.c Beschrijving

Abstracte functiewijzers in C C Bibliotheken en toepassingscomponenten maken vaak gebruik van functie-callbacks om met andere code te interface. Soms is de vereiste handtekening van de callback irritant en / of introduceert de duisternis en indirectie die, tot nu toe, zwijgend moest lijden. De afgevaardigde.c-pakket implementeert een soort abstracte functiepointer door een functiesignatuur vast te leggen (Delegate ()) en het blootstellen via een eenvoudige interface (oproepen ()). Het biedt iets losjes benadering Lambda-uitdrukkingen; of nog analoogere, C # afgevaardigden. De implementatie is afhankelijk van de introspectie-gebouwdeinen van GCC, en op Libffi. Beide zijn wijd draagbaar. Alle magie in de afgevaardigde () macro moet constant zijn gevouwen door GCC, zelfs bij optimalisatieniveau .. De gegenereerde code mag niet langzamer zijn dan het rechtstreeks gebruiken van Libffi (maar ook het oorspronkelijke doel van deze code was om de Libevent API te abstrait. De kernimplementatie is volledig generiek. Deze generieke implementatie wordt vervolgens gebruikt om een event_set () / event_add () wrapper: event_delegate () te geven. Een typisch leegte (*) (INT, korte, ongeldige *) callback worden gesteld, wordt statisch gedetecteerd door Event_Delegate (). In een dergelijk geval is alleen het derde argument nodig; De eerste twee zijn impliciet. Libffi is in dit geval volledig omzeild en introduceert geen runtime-straf. Dit is handig voor micro-optimalisatie van die paar callbacks die al het verkeer krijgen.usage: / * Eenvoudig voorbeeld van afgevaardigde () en roepen (). * / Struct Delegate del = Delegate_initializer; Delegate (Del, My_Func, Arg0, Arg1, ...); ROEKEN (DEL); / * EXECUTE EXIT (EXIT_SUCCESS) OP SIGERM OF NA 60 SECONDEN. * / struct-evenement_delegate-gebeurtenis = event_delegate_initializer; int sig = sigterm; korte evenementen = ev_signal | ev_persist; struct timeval timeout = {60, 0}; event_delegate (gebeurtenis, sig, gebeurtenissen, time-out, uitgang, exit_success); event_dispatch (); Klein regressiehulpprogramma kan worden gebouwd uit de bron. Het definiëren van gedelegeerde_main zal de belangrijkste () definitie blootleggen. Wat is er nieuw in deze release: · Fix bug dat het evenement voortdurend opnieuw toevoegt, zelfs als u al in behandeling bent.


delegeer.c Gerelateerde software

boort

Pakket biedt binaire, redblack- en avl-bomen in Python en Cython ...

148

Downloaden