Commit c319edf54bd39e68b5dbb2d15f43aaa0aec61755

Authored by Georg Hopp
1 parent 23c33c57

remove the bsearch from interface selection. The amount of interfaces is very li…

…mited and there is no benefit compared to a direct iteration
... ... @@ -88,7 +88,7 @@
88 88 * \see TR_CREATE_CLASS
89 89 */
90 90 #define TR_INIT_IFACE_IMPL(...) \
91   - {TR_IFACE_NUMARGS(__VA_ARGS__), 0, {__VA_ARGS__}}
  91 + {TR_IFACE_NUMARGS(__VA_ARGS__), {__VA_ARGS__}}
92 92
93 93 /**
94 94 * The interface implementations for a class.
... ... @@ -99,16 +99,6 @@
99 99 struct TR_iface_impl {
100 100 /** the number of interface implementations */
101 101 const size_t nimpl;
102   - /**
103   - * This indicates if impls was sorted. The first time it
104   - * will be accessed via TR_interfaceGet, This array will
105   - * be sorted with quicksort to make subsequent interface
106   - * searches faster. After it was sorted this flag will be set
107   - * to true,
108   - *
109   - * \see TR_interfaceGet
110   - */
111   - char simpl;
112 102 /** Array to hold the used interface implementations. */
113 103 const void * impl[TR_MAX_IFACE];
114 104 };
... ...
... ... @@ -28,45 +28,23 @@
28 28 #include "tr/commons.h"
29 29
30 30 /**
31   - * Compare interfaces.
32   - * Used with bsearch on the interfaces.
33   - */
34   -static
35   -inline
36   -int
37   -comp(const void * _a, const void * _b)
38   -{
39   - const struct interface * a = **(const struct interface ***)_a;
40   - const struct interface * b = **(const struct interface ***)_b;
41   - return ((a)<(b))? -1 : ((a)>(b))? 1 : 0;
42   -}
43   -
44   -/**
45 31 * Get a specific interface implementation from the interface
46 32 * implementation from a class.
47 33 */
48 34 TR_iface_ptr
49   -TR_interfaceGet(TR_iface_impl_ptr iface_impl, const TR_iface_ptr _iface)
  35 +TR_interfaceGet(TR_iface_impl_ptr iface_impl, const TR_iface_ptr iface)
50 36 {
51   - const TR_iface_ptr * iface = &_iface;
52   - TR_iface_ptr * found;
53   -
54   - if (! iface_impl->simpl) {
55   - qsort(
56   - (void**)(iface_impl->impl),
57   - iface_impl->nimpl,
58   - sizeof(TR_iface_ptr), comp);
59   - iface_impl->simpl=TRUE;
60   - }
  37 + TR_iface_ptr found = (TR_iface_ptr)NULL;
  38 + size_t i;
61 39
62   - found = bsearch(
63   - &iface,
64   - iface_impl->impl,
65   - iface_impl->nimpl,
66   - sizeof(TR_iface_ptr),
67   - comp);
  40 + for (i = 0; i < iface_impl->nimpl; i++) {
  41 + if (*(TR_iface_ptr *)(iface_impl->impl[i]) == iface) {
  42 + found = iface_impl->impl[i];
  43 + break;
  44 + }
  45 + }
68 46
69   - return found? *found : (TR_iface_ptr)NULL;
  47 + return found;
70 48 }
71 49
72 50 // vim: set ts=4 sw=4:
... ...
Please register or login to post a comment