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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
#![allow(non_camel_case_types)]
extern crate libc;
use libc::{c_void, c_int, c_uint, c_float, c_double, c_char, c_uchar, c_long, c_ulong, size_t};
pub type GQuark = u32;
pub type gsize = size_t;
pub type GType = gsize;
pub type gboolean = c_int;
pub const GFALSE: c_int = 0;
pub const GTRUE: c_int = 1;
pub type gconstpointer = *const c_void;
pub type gpointer = *mut c_void;
pub type GSourceFunc = extern "C" fn(user_data: gpointer) -> gboolean;
pub type GCallback = extern "C" fn();
pub type GClosureNotify = extern "C" fn(data: gpointer, closure: gpointer);
pub type GDestroyNotify = unsafe extern "C" fn(data: gpointer);
pub type GHashFunc = unsafe extern "C" fn(v: gconstpointer) -> c_uint;
pub type GEqualFunc = unsafe extern "C" fn(v1: gconstpointer, v2: gconstpointer) -> gboolean;
pub type GHFunc = unsafe extern "C" fn(key: gpointer, value: gpointer, user_data: gpointer);
#[repr(C)]
pub struct GAppInfo;
#[repr(C)]
pub struct GValue {
type_: GType,
data: [size_t; 2],
}
#[repr(C)]
pub struct GList {
pub data: *mut c_void,
pub next: *mut GList,
pub prev: *mut GList
}
#[repr(C)]
pub struct GSList {
pub data: *mut c_void,
pub next: *mut GSList
}
#[repr(C)]
pub struct GError {
pub domain : GQuark,
pub code : i32,
pub message: *mut c_char
}
#[repr(C)]
pub struct GPermission;
#[repr(C)]
pub struct GObject;
#[repr(C)]
pub struct GMainLoop;
#[repr(C)]
pub struct GMainContext;
#[repr(C)]
pub struct GSource;
#[repr(C)]
pub struct GPid;
#[repr(C)]
pub struct GPollFD;
#[repr(C)]
pub struct GDate;
#[repr(C)]
pub struct GHashTable;
pub const G_TYPE_FUNDAMENTAL_SHIFT: u8 = 2;
pub const G_TYPE_INVALID: GType = 0 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_NONE: GType = 1 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_INTERFACE: GType = 2 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_CHAR: GType = 3 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_UCHAR: GType = 4 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_BOOLEAN: GType = 5 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_INT: GType = 6 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_UINT: GType = 7 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_LONG: GType = 8 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_ULONG: GType = 9 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_INT64: GType = 10 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_UINT64: GType = 11 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_ENUM: GType = 12 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_FLAGS: GType = 13 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_FLOAT: GType = 14 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_DOUBLE: GType = 15 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_STRING: GType = 16 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_POINTER: GType = 17 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_BOXED: GType = 18 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_PARAM: GType = 19 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_OBJECT: GType = 20 << G_TYPE_FUNDAMENTAL_SHIFT;
pub const G_TYPE_VARIANT: GType = 21 << G_TYPE_FUNDAMENTAL_SHIFT;
extern "C" {
pub fn g_free (ptr: gpointer);
pub fn g_strndup (s: *const c_char, n: gsize) -> *mut c_char;
pub fn g_slist_free (list: *mut GSList);
pub fn g_slist_append (list: *mut GSList, data: *mut c_void) -> *mut GSList;
pub fn g_slist_prepend (list: *mut GSList, data: *mut c_void) -> *mut GSList;
pub fn g_slist_insert (list: *mut GSList, data: *mut c_void, position: c_int) -> *mut GSList;
pub fn g_slist_concat (list: *mut GSList, list2: *mut GSList) -> *mut GSList;
pub fn g_slist_nth_data (list: *mut GSList, n: c_uint) -> *mut c_void;
pub fn g_slist_length (list: *mut GSList) -> c_uint;
pub fn g_slist_last (list: *mut GSList) -> *mut GSList;
pub fn g_slist_copy (list: *mut GSList) -> *mut GSList;
pub fn g_slist_reverse (list: *mut GSList) -> *mut GSList;
pub fn g_slist_remove (list: *mut GSList, data: *mut c_void) -> *mut GSList;
pub fn g_slist_remove_all (list: *mut GSList, data: *mut c_void) -> *mut GSList;
pub fn g_slist_remove_link (list: *mut GSList, link_: GSList) -> *mut GSList;
pub fn g_slist_delete_link (list: *mut GSList, link_: GSList) -> *mut GSList;
pub fn g_slist_find (list: *mut GSList, data: *mut c_void) -> *mut GSList;
pub fn g_slist_position (list: *mut GSList, link_: GSList) -> c_int;
pub fn g_list_free (list: *mut GList);
pub fn g_list_append (list: *mut GList, data: *mut c_void) -> *mut GList;
pub fn g_list_prepend (list: *mut GList, data: *mut c_void) -> *mut GList;
pub fn g_list_insert (list: *mut GList, data: *mut c_void, position: c_int) -> *mut GList;
pub fn g_list_concat (list: *mut GList, list2: *mut GList) -> *mut GList;
pub fn g_list_nth_data (list: *mut GList, n: c_uint) -> *mut c_void;
pub fn g_list_length (list: *mut GList) -> c_uint;
pub fn g_list_last (list: *mut GList) -> *mut GList;
pub fn g_list_first (list: *mut GList) -> *mut GList;
pub fn g_list_copy (list: *mut GList) -> *mut GList;
pub fn g_list_reverse (list: *mut GList) -> *mut GList;
pub fn g_list_remove (list: *mut GList, data: *mut c_void) -> *mut GList;
pub fn g_list_remove_all (list: *mut GList, data: *mut c_void) -> *mut GList;
pub fn g_list_remove_link (list: *mut GList, link_: GList) -> *mut GList;
pub fn g_list_delete_link (list: *mut GList, link_: GList) -> *mut GList;
pub fn g_list_find (list: *mut GList, data: *mut c_void) -> *mut GList;
pub fn g_list_position (list: *mut GList, link_: GList) -> c_int;
pub fn g_app_info_get_type () -> GType;
pub fn g_error_new_literal (domain: GQuark, code: c_int, message: *const c_char) -> *mut GError;
pub fn g_error_free (error: *mut GError) -> ();
pub fn g_error_copy (error: *mut GError) -> *mut GError;
pub fn g_error_matches (error: *mut GError, domain: GQuark, code: c_int) -> gboolean;
pub fn g_set_error_literal (error: *mut *mut GError, domain: GQuark, code: c_int, message: *const c_char) -> ();
pub fn g_propagate_error (dest: *mut *mut GError, src: *mut GError) -> ();
pub fn g_clear_error (err: *mut *mut GError) -> ();
pub fn g_permission_get_allowed (permission: *mut GPermission) -> gboolean;
pub fn g_permission_get_can_acquire (permission: *mut GPermission) -> gboolean;
pub fn g_permission_get_can_release (permission: *mut GPermission) -> gboolean;
pub fn g_permission_impl_update (permission: *mut GPermission, allowed: gboolean, can_acquire: gboolean, can_release: gboolean);
pub fn g_object_ref(object: *mut c_void) -> *mut c_void;
pub fn g_object_ref_sink(object: *mut c_void) -> *mut c_void;
pub fn g_object_unref(object: *mut c_void);
pub fn glue_signal_connect(g_object: *mut GObject,
signal: *const c_char,
func: Option<extern "C" fn()>,
user_data: *const c_void);
pub fn g_type_check_instance_is_a(type_instance: gconstpointer,
iface_type: GType) -> gboolean;
pub fn create_gvalue () -> *mut GValue;
pub fn get_gtype (_type: GType) -> GType;
pub fn g_value_init (value: *mut GValue, _type: GType);
pub fn g_value_reset (value: *mut GValue);
pub fn g_value_unset (value: *mut GValue);
pub fn g_strdup_value_contents (value: *mut GValue) -> *mut c_char;
pub fn g_value_set_boolean (value: *mut GValue, b: gboolean);
pub fn g_value_get_boolean (value: *const GValue) -> gboolean;
pub fn g_value_set_schar (value: *mut GValue, b: c_char);
pub fn g_value_get_schar (value: *const GValue) -> c_char;
pub fn g_value_set_uchar (value: *mut GValue, b: c_uchar);
pub fn g_value_get_uchar (value: *const GValue) -> c_uchar;
pub fn g_value_set_int (value: *mut GValue, b: c_int);
pub fn g_value_get_int (value: *const GValue) -> c_int;
pub fn g_value_set_uint (value: *mut GValue, b: c_uint);
pub fn g_value_get_uint (value: *const GValue) -> c_uint;
pub fn g_value_set_long (value: *mut GValue, b: c_long);
pub fn g_value_get_long (value: *const GValue) -> c_long;
pub fn g_value_set_ulong (value: *mut GValue, b: c_ulong);
pub fn g_value_get_ulong (value: *const GValue) -> c_ulong;
pub fn g_value_set_int64 (value: *mut GValue, b: i64);
pub fn g_value_get_int64 (value: *const GValue) -> i64;
pub fn g_value_set_uint64 (value: *mut GValue, b: u64);
pub fn g_value_get_uint64 (value: *const GValue) -> u64;
pub fn g_value_set_float (value: *mut GValue, b: c_float);
pub fn g_value_get_float (value: *const GValue) -> c_float;
pub fn g_value_set_double (value: *mut GValue, b: c_double);
pub fn g_value_get_double (value: *const GValue) -> c_double;
pub fn g_value_set_enum (value: *mut GValue, b: GType);
pub fn g_value_get_enum (value: *const GValue) -> GType;
pub fn g_value_set_flags (value: *mut GValue, b: GType);
pub fn g_value_get_flags (value: *const GValue) -> GType;
pub fn g_value_set_string (value: *mut GValue, b: *const c_char);
pub fn g_value_set_static_string (value: *mut GValue, b: *const c_char);
pub fn g_value_get_string (value: *const GValue) -> *const c_char;
pub fn g_value_dup_string (value: *mut GValue) -> *mut c_char;
pub fn g_value_set_boxed (value: *mut GValue, b: *const c_void);
pub fn g_value_set_static_boxed (value: *mut GValue, b: *const c_void);
pub fn g_value_get_boxed (value: *const GValue) -> *const c_void;
pub fn g_value_set_pointer (value: *mut GValue, b: *const c_void);
pub fn g_value_get_pointer (value: *const GValue) -> *const c_void;
pub fn g_value_set_object (value: *mut GValue, b: *const c_void);
pub fn g_value_take_object (value: *mut GValue, b: *const c_void);
pub fn g_value_get_object (value: *const GValue) -> *const c_void;
pub fn g_value_set_gtype (value: *mut GValue, b: GType);
pub fn g_value_get_gtype (value: *const GValue) -> GType;
pub fn g_value_type_compatible (src_type: GType, dest_type: GType) -> gboolean;
pub fn g_value_type_transformable (src_type: GType, dest_type: GType) -> gboolean;
pub fn g_main_loop_new (context: *mut GMainContext, is_running: gboolean) -> *mut GMainLoop;
pub fn g_main_loop_ref (loop_: *mut GMainLoop) -> *mut GMainLoop;
pub fn g_main_loop_unref (loop_: *mut GMainLoop);
pub fn g_main_loop_run (loop_: *mut GMainLoop);
pub fn g_main_loop_quit (loop_: *mut GMainLoop);
pub fn g_main_loop_is_running (loop_: *mut GMainLoop) -> gboolean;
pub fn g_main_loop_get_context (loop_: *mut GMainLoop) -> *mut GMainContext;
pub fn g_main_context_new () -> *mut GMainContext;
pub fn g_main_context_ref (context: *mut GMainContext) -> *mut GMainContext;
pub fn g_main_context_unref (context: *mut GMainContext);
pub fn g_main_context_default () -> *mut GMainContext;
pub fn g_main_context_iteration (context: *mut GMainContext, may_block: gboolean) -> gboolean;
pub fn g_main_context_pending (context: *mut GMainContext) -> gboolean;
pub fn g_main_context_find_source_by_id (context: *mut GMainContext, source_id: c_uint) -> *mut GSource;
pub fn g_main_context_find_source_by_user_data(context: *mut GMainContext, user_data: gpointer) -> *mut GSource;
pub fn g_main_context_wakeup (context: *mut GMainContext);
pub fn g_main_context_acquire (context: *mut GMainContext) -> gboolean;
pub fn g_main_context_release (context: *mut GMainContext);
pub fn g_main_context_is_owner (context: *mut GMainContext) -> gboolean;
pub fn g_main_context_prepare (context: *mut GMainContext, priority: *mut c_int) -> gboolean;
pub fn g_main_context_dispatch (context: *mut GMainContext);
pub fn g_main_context_add_poll (context: *mut GMainContext, fd: *mut GPollFD, priority: c_int);
pub fn g_main_context_remove_poll (context: *mut GMainContext, fd: *mut GPollFD);
pub fn g_main_depth () -> c_int;
pub fn g_main_current_source () -> *mut GSource;
pub fn g_main_context_get_thread_default () -> *mut GMainContext;
pub fn g_main_context_ref_thread_default () -> *mut GMainContext;
pub fn g_main_context_push_thread_default (context: *mut GMainContext);
pub fn g_main_context_pop_thread_default (context: *mut GMainContext);
pub fn g_timeout_source_new () -> *mut GSource;
pub fn g_timeout_source_new_seconds (interval: c_uint) -> *mut GSource;
pub fn g_timeout_add_full (priority: c_int, interval: c_uint, function: GSourceFunc, data: gpointer, notify: GDestroyNotify) -> c_uint;
pub fn g_timeout_add_seconds_full (priority: c_int, interval: c_uint, function: GSourceFunc, data: gpointer, notify: GDestroyNotify) -> c_uint;
pub fn g_idle_source_new () -> *mut GSource;
pub fn g_idle_add_full (priority: c_int, function: GSourceFunc, data: gpointer, notify: GDestroyNotify) -> c_uint;
pub fn g_idle_remove_by_data (data: gpointer) -> gboolean;
pub fn g_child_watch_source_new (pid: GPid) -> *mut GSource;
pub fn g_poll (fds: *mut GPollFD, nfds: c_uint, timeout: c_int) -> c_int;
pub fn g_source_ref (source: *mut GSource) -> *mut GSource;
pub fn g_source_unref (source: *mut GSource);
pub fn g_source_attach (source: *mut GSource, context: *mut GMainContext);
pub fn g_source_destroy (source: *mut GSource);
pub fn g_source_is_destroyed (source: *mut GSource) -> gboolean;
pub fn g_source_set_priority (source: *mut GSource, priority: c_int);
pub fn g_source_get_priority (source: *mut GSource) -> c_int;
pub fn g_source_set_can_recurse (source: *mut GSource, can_recurse: gboolean);
pub fn g_source_get_can_recurse (source: *mut GSource) -> gboolean;
pub fn g_source_get_id (source: *mut GSource) -> c_uint;
pub fn g_source_get_name (source: *mut GSource) -> *const c_char;
pub fn g_source_set_name (source: *mut GSource, name: *const c_char);
pub fn g_source_set_name_by_id (tag: c_uint, name: *const c_char);
pub fn g_source_get_context (source: *mut GSource) -> *mut GMainContext;
pub fn g_source_set_ready_time (source: *mut GSource, ready_time: i64);
pub fn g_source_get_ready_time (source: *mut GSource) -> i64;
pub fn g_source_add_poll (source: *mut GSource, fd: *mut GPollFD);
pub fn g_source_remove_poll (source: *mut GSource, fd: *mut GPollFD);
pub fn g_source_add_child_source (source: *mut GSource, child_source: *mut GSource);
pub fn g_source_remove_child_source (source: *mut GSource, child_source: *mut GSource);
pub fn g_source_get_time (source: *mut GSource) -> i64;
pub fn g_source_remove (tag: c_uint) -> gboolean;
pub fn g_source_remove_by_user_data (user_data: gpointer) -> gboolean;
pub fn g_signal_connect_data(instance: gpointer, detailed_signal: *const c_char,
c_handler: GCallback, data: gpointer,
destroy_data: GClosureNotify, connect_flags: c_int) -> c_ulong;
pub fn g_get_current_time (result: *mut c_void);
pub fn g_usleep (microseconds: c_ulong);
pub fn g_get_monotonic_time () -> i64;
pub fn g_get_real_time () -> i64;
pub fn g_date_get_days_in_month (month: c_int, year: u16) -> u8;
pub fn g_date_is_leap_year (year: u16) -> gboolean;
pub fn g_date_get_monday_weeks_in_year(year: u16) -> u8;
pub fn g_date_get_sunday_weeks_in_year(year: u16) -> u8;
pub fn g_date_valid_day (day: c_int) -> gboolean;
pub fn g_date_valid_month (month: c_int) -> gboolean;
pub fn g_date_valid_year (year: u16) -> gboolean;
pub fn g_date_valid_dmy (day: c_int, month: c_int, year: u16) -> gboolean;
pub fn g_date_valid_julian (julian: u32) -> gboolean;
pub fn g_date_valid_weekday (year: c_int) -> gboolean;
pub fn g_date_new () -> *mut GDate;
pub fn g_date_new_dmy (day: c_int, month: c_int, year: u16) -> *mut GDate;
pub fn g_date_new_julian (julian_day: u32) -> *mut GDate;
pub fn g_date_clear (date: *mut GDate, n_dates: c_uint);
pub fn g_date_free (date: *mut GDate);
pub fn g_date_set_day (date: *mut GDate, day: c_int);
pub fn g_date_set_month (date: *mut GDate, month: c_int);
pub fn g_date_set_year (date: *mut GDate, year: u16);
pub fn g_date_set_dmy (date: *mut GDate, day: c_int, month: c_int, year: u16);
pub fn g_date_set_julian (date: *mut GDate, julian: u32);
pub fn g_date_set_time_t (date: *mut GDate, timet: i64);
pub fn g_date_set_time_val (date: *mut GDate, timeval: *mut c_void);
pub fn g_date_set_parse (date: *mut GDate, str_: *const c_char);
pub fn g_date_add_days (date: *mut GDate, days: c_uint);
pub fn g_date_subtract_days (date: *mut GDate, days: c_uint);
pub fn g_date_add_months (date: *mut GDate, months: c_uint);
pub fn g_date_subtract_months (date: *mut GDate, months: c_uint);
pub fn g_date_add_years (date: *mut GDate, years: c_uint);
pub fn g_date_subtract_years (date: *mut GDate, years: c_uint);
pub fn g_date_days_between (date1: *const GDate, date2: *const GDate) -> c_int;
pub fn g_date_compare (lhs: *const GDate, rhs: *const GDate) -> c_int;
pub fn g_date_clamp (date: *mut GDate, min_date: *const GDate, max_date: *const GDate);
pub fn g_date_order (date1: *mut GDate, date2: *mut GDate);
pub fn g_date_get_day (date: *const GDate) -> u8;
pub fn g_date_get_month (date: *const GDate) -> c_int;
pub fn g_date_get_year (date: *const GDate) -> u16;
pub fn g_date_get_julian (date: *const GDate) -> u32;
pub fn g_date_get_weekday (date: *const GDate) -> c_int;
pub fn g_date_get_day_of_year (date: *const GDate) -> c_uint;
pub fn g_date_is_first_of_month(date: *const GDate) -> gboolean;
pub fn g_date_is_last_of_month(date: *const GDate) -> gboolean;
pub fn g_date_get_monday_week_of_year(date: *const GDate) -> c_uint;
pub fn g_date_get_sunday_week_of_year(date: *const GDate) -> c_uint;
pub fn g_date_get_iso8601_week_of_year(date: *const GDate) -> c_uint;
pub fn g_date_strftime (s: *mut c_char, slen: u32, format: *const c_char, date: *const GDate) -> u32;
pub fn g_date_valid (date: *const GDate) -> gboolean;
pub fn g_time_val_add (time_: *mut c_void, microseconds: c_ulong);
pub fn g_time_val_from_iso8601(iso_date: *const c_char, time_: *mut c_void);
pub fn g_time_val_to_iso8601 (time_: *mut c_void) -> *mut c_char;
pub fn g_hash_table_new (hash_func: GHashFunc, key_equal_func: GEqualFunc) -> *mut GHashTable;
pub fn g_hash_table_new_full (hash_func: GHashFunc,
key_equal_func: GEqualFunc,
key_destroy_func: GDestroyNotify,
value_destroy_func: GDestroyNotify) -> *mut GHashTable;
pub fn g_hash_table_insert (hash_table: *mut GHashTable, key: gpointer, value: gpointer) -> gboolean;
pub fn g_hash_table_replace (hash_table: *mut GHashTable, key: gpointer, value: gpointer) -> gboolean;
pub fn g_hash_table_add (hash_table: *mut GHashTable, key: gpointer) -> gboolean;
pub fn g_hash_table_contains (hash_table: *mut GHashTable, key: gconstpointer) -> gboolean;
pub fn g_hash_table_size (hash_table: *mut GHashTable) -> c_uint;
pub fn g_hash_table_lookup (hash_table: *mut GHashTable, key: gconstpointer) -> gpointer;
pub fn g_hash_table_lookup_extended (hash_table: *mut GHashTable, lookup_key: gconstpointer, orig_key: gpointer, value: gpointer) -> gboolean;
pub fn g_hash_table_foreach (hash_table: *mut GHashTable, func: GHFunc, user_data: gpointer);
pub fn g_hash_table_remove (hash_table: *mut GHashTable, key: gconstpointer) -> gboolean;
pub fn g_hash_table_steal (hash_table: *mut GHashTable, key: gconstpointer) -> gboolean;
pub fn g_hash_table_remove_all (hash_table: *mut GHashTable);
pub fn g_hash_table_steal_all (hash_table: *mut GHashTable);
pub fn g_hash_table_get_keys (hash_table: *mut GHashTable) -> *mut GList;
pub fn g_hash_table_get_values (hash_table: *mut GHashTable) -> *mut GList;
pub fn g_hash_table_get_keys_as_array(hash_table: *mut GHashTable, length: *mut c_uint) -> gpointer;
pub fn g_hash_table_destroy (hash_table: *mut GHashTable);
pub fn g_hash_table_ref (hash_table: *mut GHashTable) -> *mut GHashTable;
pub fn g_hash_table_unref (hash_table: *mut GHashTable);
pub fn g_direct_equal (v1: gconstpointer, v2: gconstpointer) -> gboolean;
pub fn g_direct_hash (v: gconstpointer) -> c_uint;
pub fn g_int_equal (v1: gconstpointer, v2: gconstpointer) -> gboolean;
pub fn g_int_hash (v: gconstpointer) -> c_uint;
pub fn g_int64_equal (v1: gconstpointer, v2: gconstpointer) -> gboolean;
pub fn g_int64_hash (v: gconstpointer) -> c_uint;
pub fn g_double_equal (v1: gconstpointer, v2: gconstpointer) -> gboolean;
pub fn g_double_hash (v: gconstpointer) -> c_uint;
pub fn g_str_equal (v1: gconstpointer, v2: gconstpointer) -> gboolean;
pub fn g_str_hash (v: gconstpointer) -> c_uint;
}