efl

Форк
0
/
database_function.c 
69 строк · 2.1 Кб
1
#ifdef HAVE_CONFIG_H
2
# include "config.h"
3
#endif
4

5
#include <Eina.h>
6
#include "eolian_database.h"
7

8
void
9
database_function_del(Eolian_Function *fid)
10
{
11
   Eolian_Function_Parameter *param;
12
   Eina_Stringshare *cls_name;
13
   if (!fid) return;
14

15
   eina_stringshare_del(fid->base.file);
16
   eina_stringshare_del(fid->base.name);
17
   EINA_LIST_FREE(fid->prop_values, param) database_parameter_del(param);
18
   EINA_LIST_FREE(fid->prop_values_get, param) database_parameter_del(param);
19
   EINA_LIST_FREE(fid->prop_values_set, param) database_parameter_del(param);
20
   EINA_LIST_FREE(fid->prop_keys, param) database_parameter_del(param);
21
   EINA_LIST_FREE(fid->prop_keys_get, param) database_parameter_del(param);
22
   EINA_LIST_FREE(fid->prop_keys_set, param) database_parameter_del(param);
23
   EINA_LIST_FREE(fid->ctor_of, cls_name) eina_stringshare_del(cls_name);
24
   database_type_del(fid->get_ret_type);
25
   database_type_del(fid->set_ret_type);
26
   database_expr_del(fid->get_ret_val);
27
   database_expr_del(fid->set_ret_val);
28
   database_doc_del(fid->get_return_doc);
29
   database_doc_del(fid->set_return_doc);
30
   free(fid);
31
}
32

33
static Eina_List*
34
_list_sorted_insert_no_dup(Eina_List *l, Eina_Compare_Cb func, const void *data)
35
{
36
   Eina_List *lnear;
37
   int cmp;
38

39
   if (!l)
40
     return eina_list_append(NULL, data);
41
   else
42
     lnear = eina_list_search_sorted_near_list(l, func, data, &cmp);
43

44
   if (cmp < 0)
45
     return eina_list_append_relative_list(l, data, lnear);
46
   else if (cmp > 0)
47
     return eina_list_prepend_relative_list(l, data, lnear);
48
   return l;
49
}
50

51
void
52
database_function_constructor_add(Eolian_Function *func, const Eolian_Class *cls)
53
{
54
   func->ctor_of = _list_sorted_insert_no_dup
55
     (func->ctor_of, EINA_COMPARE_CB(strcmp),
56
      eina_stringshare_ref(cls->base.name));
57
}
58

59
Eina_Bool
60
database_function_is_type(Eolian_Function *fid, Eolian_Function_Type ftype)
61
{
62
   if (ftype == EOLIAN_UNRESOLVED)
63
     return EINA_TRUE;
64
   else if (ftype == EOLIAN_PROP_GET)
65
     return (fid->type == EOLIAN_PROP_GET) || (fid->type == EOLIAN_PROPERTY);
66
   else if (ftype == EOLIAN_PROP_SET)
67
     return (fid->type == EOLIAN_PROP_SET) || (fid->type == EOLIAN_PROPERTY);
68
   return (fid->type == ftype);
69
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.