summaryrefslogtreecommitdiffstats
path: root/lib/efl/native/eina_hash.rb
blob: f1df86e4f115c4ddf0d0f397bd32b2dfcf144b1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#! /usr/bin/env ruby
# -*- coding: UTF-8 -*-
#
require 'efl/ffi'
#
module Efl
    #
    module EinaHash
        #
        def self.method_missing m, *args, &block
            m_s = m.to_s
            if m_s =~/^(.*)=$/
                m_s = $1+'_set'
                args_s = '*args[0]'
            elsif m_s =~/^(.*)\?$/
                m_s = $1+'_get'
                args_s = '*args'
            else
                args_s = '*args'
            end
            sym = (
                if Efl::Native.respond_to? 'eina_hash_'+m_s
                    'eina_hash_'+m_s
                elsif Efl::Native.respond_to? m_s
                    m_s
                elsif Efl::Native.respond_to? 'eina_hash_'+m_s+'_get'
                    'eina_hash_'+m_s+'_get'
                elsif Efl::Native.respond_to? m_s+'_get'
                    m_s+'_get'
                else
                    raise NameError.new "#{self.name}.#{m_s} (#{m})"
                end
            )
            self.module_eval "def self.#{m} *args, █ r=Efl::Native.#{sym}(*args); yield r if block_given?; r; end"
            self.send m, *args, &block
        end
        #
    end
    #
    module Native
        #
        extend Efl::FFIHelper
        #
        ffi_lib 'eina'
        #
        # ENUMS
        #
        # TYPEDEFS
        # typedef struct _Eina_Hash Eina_Hash;
        typedef :pointer, :eina_hash
        typedef :pointer, :eina_hash_p
        # typedef struct _Eina_Hash_Tuple Eina_Hash_Tuple;
        typedef :pointer, :eina_hash_tuple
        #
        # CALLBACKS
        # typedef unsigned int (*Eina_Key_Length) (const void *key);
        callback :eina_key_length, [ :void_p ], :uint
        # typedef int (*Eina_Key_Cmp) (const void *key1, int key1_length, const void *key2, int key2_length);
        callback :eina_key_cmp, [ :void_p, :int, :void_p, :int ], :int
        # typedef int (*Eina_Key_Hash) (const void *key, int key_length);
        callback :eina_key_hash, [ :void_p, :int ], :int
        # typedef Eina_Bool (*Eina_Hash_Foreach) (const Eina_Hash *hash, const void *key, void *data, void *fdata);
        callback :eina_hash_foreach, [ :eina_hash_p, :void_p, :void_p, :void_p ], :eina_bool
        #
        # VARIABLES
        #
        # FUNCTIONS
        fcts = [
        # EAPI Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb, Eina_Key_Cmp key_cmp_cb, Eina_Key_Hash key_hash_cb, Eina_Free_Cb data_free_cb, int buckets_power_size);
        [ :eina_hash_new, [ :eina_key_length, :eina_key_cmp, :eina_key_hash, :eina_free_cb, :int ], :eina_hash_p ],
        # EAPI Eina_Hash *eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb);
        [ :eina_hash_string_djb2_new, [ :eina_free_cb ], :eina_hash_p ],
        # EAPI Eina_Hash *eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb);
        [ :eina_hash_string_superfast_new, [ :eina_free_cb ], :eina_hash_p ],
        # EAPI Eina_Hash *eina_hash_string_small_new(Eina_Free_Cb data_free_cb);
        [ :eina_hash_string_small_new, [ :eina_free_cb ], :eina_hash_p ],
        # EAPI Eina_Hash *eina_hash_int32_new(Eina_Free_Cb data_free_cb);
        [ :eina_hash_int32_new, [ :eina_free_cb ], :eina_hash_p ],
        # EAPI Eina_Hash *eina_hash_int64_new(Eina_Free_Cb data_free_cb);
        [ :eina_hash_int64_new, [ :eina_free_cb ], :eina_hash_p ],
        # EAPI Eina_Hash *eina_hash_pointer_new(Eina_Free_Cb data_free_cb);
        [ :eina_hash_pointer_new, [ :eina_free_cb ], :eina_hash_p ],
        # EAPI Eina_Hash *eina_hash_stringshared_new(Eina_Free_Cb data_free_cb);
        [ :eina_hash_stringshared_new, [ :eina_free_cb ], :eina_hash_p ],
        # EAPI Eina_Bool eina_hash_add(Eina_Hash *hash, const void *key, const void *data);
        [ :eina_hash_add, [ :eina_hash_p, :void_p, :void_p ], :eina_bool ],
        # EAPI Eina_Bool eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data);
        [ :eina_hash_direct_add, [ :eina_hash_p, :void_p, :void_p ], :eina_bool ],
        # EAPI Eina_Bool eina_hash_del(Eina_Hash *hash, const void *key, const void *data);
        [ :eina_hash_del, [ :eina_hash_p, :void_p, :void_p ], :eina_bool ],
        # EAPI void *eina_hash_find(const Eina_Hash *hash, const void *key);
        [ :eina_hash_find, [ :eina_hash_p, :void_p ], :void_p ],
        # EAPI void *eina_hash_modify(Eina_Hash *hash, const void *key, const void *data);
        [ :eina_hash_modify, [ :eina_hash_p, :void_p, :void_p ], :void_p ],
        # EAPI void *eina_hash_set(Eina_Hash *hash, const void *key, const void *data);
        [ :eina_hash_set, [ :eina_hash_p, :void_p, :void_p ], :void_p ],
        # EAPI Eina_Bool eina_hash_move(Eina_Hash *hash, const void *old_key, const void *new_key);
        [ :eina_hash_move, [ :eina_hash_p, :void_p, :void_p ], :eina_bool ],
        # EAPI void eina_hash_free(Eina_Hash *hash);
        [ :eina_hash_free, [ :eina_hash_p ], :void ],
        # EAPI void eina_hash_free_buckets(Eina_Hash *hash);
        [ :eina_hash_free_buckets, [ :eina_hash_p ], :void ],
        # EAPI int eina_hash_population(const Eina_Hash *hash);
        [ :eina_hash_population, [ :eina_hash_p ], :int ],
        # EAPI Eina_Bool eina_hash_add_by_hash(Eina_Hash *hash, const void *key, int key_length, int key_hash, const void *data);
        [ :eina_hash_add_by_hash, [ :eina_hash_p, :void_p, :int, :int, :void_p ], :eina_bool ],
        # EAPI Eina_Bool eina_hash_direct_add_by_hash(Eina_Hash *hash, const void *key, int key_length, int key_hash, const void *data);
        [ :eina_hash_direct_add_by_hash, [ :eina_hash_p, :void_p, :int, :int, :void_p ], :eina_bool ],
        # EAPI Eina_Bool eina_hash_del_by_key_hash(Eina_Hash *hash, const void *key, int key_length, int key_hash);
        [ :eina_hash_del_by_key_hash, [ :eina_hash_p, :void_p, :int, :int ], :eina_bool ],
        # EAPI Eina_Bool eina_hash_del_by_key(Eina_Hash *hash, const void *key);
        [ :eina_hash_del_by_key, [ :eina_hash_p, :void_p ], :eina_bool ],
        # EAPI Eina_Bool eina_hash_del_by_data(Eina_Hash *hash, const void *data);
        [ :eina_hash_del_by_data, [ :eina_hash_p, :void_p ], :eina_bool ],
        # EAPI Eina_Bool eina_hash_del_by_hash(Eina_Hash *hash, const void *key, int key_length, int key_hash, const void *data);
        [ :eina_hash_del_by_hash, [ :eina_hash_p, :void_p, :int, :int, :void_p ], :eina_bool ],
        # EAPI void *eina_hash_find_by_hash(const Eina_Hash *hash, const void *key, int key_length, int key_hash);
        [ :eina_hash_find_by_hash, [ :eina_hash_p, :void_p, :int, :int ], :void_p ],
        # EAPI void *eina_hash_modify_by_hash(Eina_Hash *hash, const void *key, int key_length, int key_hash, const void *data);
        [ :eina_hash_modify_by_hash, [ :eina_hash_p, :void_p, :int, :int, :void_p ], :void_p ],
        # EAPI Eina_Iterator *eina_hash_iterator_key_new(const Eina_Hash *hash);
        [ :eina_hash_iterator_key_new, [ :eina_hash_p ], :eina_iterator_p ],
        # EAPI Eina_Iterator *eina_hash_iterator_data_new(const Eina_Hash *hash);
        [ :eina_hash_iterator_data_new, [ :eina_hash_p ], :eina_iterator_p ],
        # EAPI Eina_Iterator *eina_hash_iterator_tuple_new(const Eina_Hash *hash);
        [ :eina_hash_iterator_tuple_new, [ :eina_hash_p ], :eina_iterator_p ],
        # EAPI void eina_hash_foreach(const Eina_Hash *hash, Eina_Hash_Foreach cb, const void *fdata);
        [ :eina_hash_foreach, [ :eina_hash_p, :eina_hash_foreach, :void_p ], :void ],
        # EAPI int eina_hash_superfast(const char *key, int len);
        [ :eina_hash_superfast, [ :string, :int ], :int ],
        ]
        #
        attach_fcts fcts
        #
    end
end
#
# EOF