Changeset 5816:6c593d184ef2 in roaraudio for include/libroar/roardl.h


Ignore:
Timestamp:
01/05/13 14:31:33 (11 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

improved service interface even more, allow creation of a simple interface object to access functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/roardl.h

    r5815 r5816  
    420420} 
    421421 
    422 const void * libroar_dl_service_get_api(struct roar_dl_librarypara * para, const char * appname, const char * appabi, const char * servicename, const char * serviceabi, int universal, struct roar_dl_lhandle ** lhandle); 
    423 #define roar_dl_service_get_api(para,servicename,serviceabi,type,lhandle) ((const struct type*)libroar_dl_service_get_api((para), (para)->appname, (para)->abiversion, (servicename), (serviceabi), 1, (lhandle))) 
     422struct roar_dl_service_api { 
     423 const void * api; 
     424 struct roar_dl_lhandle * lhandle; 
     425}; 
     426 
     427#define libroar_dl_service_apitype(type) \ 
     428union { \ 
     429 struct roar_dl_service_api interface; \ 
     430 const struct type * api; \ 
     431} 
     432 
     433int libroar_dl_service_get_api_real(struct roar_dl_librarypara * para, const char * appname, const char * appabi, const char * servicename, const char * serviceabi, int universal, struct roar_dl_service_api * api); 
     434#define libroar_dl_service_get_api(para,appname,appabi,servicename,serviceabi,universal,api) libroar_dl_service_get_api_real((para),(appname),(appabi),(servicename),(serviceabi),(universal),(struct roar_dl_service_api *)(api)) 
     435#define roar_dl_service_get_api(para,servicename,serviceabi,api) libroar_dl_service_get_api((para), (para)->appname, (para)->abiversion, (servicename), (serviceabi), 1, (api)) 
     436 
     437int libroar_dl_service_free_api_real(struct roar_dl_service_api * api); 
     438#define libroar_dl_service_free_api(api) libroar_dl_service_free_api_real((struct roar_dl_service_api *)&(api)) 
     439 
     440#define libroar_dl_service_run_func(obj,name,type,...) ((type[3]){(type)roar_dl_context_restore((obj).interface.lhandle), ((obj).api->name(__VA_ARGS__)), (type)roar_dl_context_store((obj).interface.lhandle)})[1] 
     441#define libroar_dl_service_run_func_void(obj,name,...) do { roar_dl_context_restore((obj).interface.lhandle); (obj).api->name(__VA_ARGS__); roar_dl_context_store((obj).interface.lhandle); } while (0) 
     442#define libroar_dl_service_check_func(obj,name) ((obj).api->name != NULL) 
    424443 
    425444// Reg FN: 
Note: See TracChangeset for help on using the changeset viewer.