#include #include #include "interface.h" #ifndef TRUE #define TRUE 1 #endif // TRUE static inline int comp(const void * _a, const void * _b) { const struct interface * a = **(const struct interface ***)_a; const struct interface * b = **(const struct interface ***)_b; return ((a)<(b))? -1 : ((a)>(b))? 1 : 0; } /** * this one is important in selector functions to get the correct interface * implementation of a class. */ struct interface * interfaceGet(iface_impl_ptr iface_impl, const iface_ptr _iface) { const iface_ptr * iface = &_iface; void * dummy; if (! iface_impl->simpl) { qsort((void**)(iface_impl->impl), iface_impl->nimpl, sizeof(iface_ptr), comp); iface_impl->simpl=TRUE; } dummy = bsearch( &iface, iface_impl->impl, iface_impl->nimpl, sizeof(iface_ptr), comp); return dummy? *(struct interface **)dummy : dummy; } // vim: set ts=4 sw=4: