5 Author: Pekka Riikonen <priikone@silcnet.org>
7 Copyright (C) 2007 Pekka Riikonen
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; version 2 of the License.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
23 /************************** Types and definitions ***************************/
26 /* Dynamically registered list of accelerators. */
27 SilcDList silc_acc_list = NULL;
28 #endif /* SILC_SYMBIAN */
30 /* Static list of accelerators */
31 const SilcAcceleratorStruct *silc_default_accs[] =
34 /* Software accelerator */
36 #endif /* SILC_SYMBIAN */
40 /*************************** SILC Accelerator API ***************************/
42 /* Register accelerator */
44 SilcBool silc_acc_register(const SilcAccelerator acc)
50 silc_acc_list = silc_dlist_init();
55 SILC_LOG_DEBUG(("Register accelerator %p, name %s", acc, acc->name));
56 silc_dlist_add(silc_acc_list, acc);
61 /* Unregister accelerator */
63 void silc_acc_unregister(SilcAccelerator acc)
71 SILC_LOG_DEBUG(("Unregister accelerator %p, name %s", acc, acc->name));
72 silc_dlist_del(silc_acc_list, acc);
74 if (!silc_dlist_count(silc_acc_list)) {
75 silc_dlist_uninit(silc_acc_list);
80 /* Initialize accelerator */
82 SilcBool silc_acc_init(SilcAccelerator acc, SilcSchedule schedule, ...)
87 if (!acc || !schedule)
90 SILC_LOG_DEBUG(("Initialize accelerator %p, name %s", acc, acc->name));
92 va_start(va, schedule);
93 ret = acc->init(schedule, va);
99 /* Uninitialize accelerator */
101 SilcBool silc_acc_uninit(SilcAccelerator acc)
106 SILC_LOG_DEBUG(("Uninitialize accelerator %p, name %s", acc, acc->name));
107 return acc->uninit();
110 /* Get list of registered accelerator */
112 SilcDList silc_acc_get_supported(void)
118 list = silc_dlist_init();
123 silc_dlist_start(silc_acc_list);
124 while ((acc = silc_dlist_get(silc_acc_list)))
125 silc_dlist_add(list, acc);
128 for (i = 0; silc_default_accs[i]->name; i++)
129 silc_dlist_add(list, (void *)silc_default_accs[i]);
134 /* Get accelerator */
136 SilcAccelerator silc_acc_find(const char *name)
144 SILC_LOG_DEBUG(("Find accelerator %s", name));
147 silc_dlist_start(silc_acc_list);
148 while ((acc = silc_dlist_get(silc_acc_list))) {
149 if (!strcmp(acc->name, name)) {
150 SILC_LOG_DEBUG(("Found accelerator %p", acc));
156 for (i = 0; silc_default_accs[i]->name; i++) {
157 if (!strcmp(silc_default_accs[i]->name, name)) {
158 SILC_LOG_DEBUG(("Found accelerator %p", silc_default_accs[i]));
159 return (SilcAccelerator)silc_default_accs[i];
163 SILC_LOG_DEBUG(("Accelerator %s does not exist", name));
167 /* Get accelerator name */
169 const char *silc_acc_get_name(SilcAccelerator acc)