fluid_hash.h
上传用户:tjmskj2
上传日期:2020-08-17
资源大小:577k
文件大小:5k
源码类别:

midi

开发平台:

C/C++

  1. /* GLIB - Library of useful routines for C programming
  2.  * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
  3.  *
  4.  * This library is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU Lesser General Public
  6.  * License as published by the Free Software Foundation; either
  7.  * version 2 of the License, or (at your option) any later version.
  8.  *
  9.  * This library is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.  * Lesser General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU Lesser General Public
  15.  * License along with this library; if not, write to the
  16.  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  17.  * Boston, MA 02111-1307, USA.
  18.  */
  19. /*
  20.  * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
  21.  * file for a list of people on the GLib Team.  See the ChangeLog
  22.  * files for a list of changes.  These files are distributed with
  23.  * GLib at ftp://ftp.gtk.org/pub/gtk/.
  24.  */
  25. /*
  26.  * Adapted for FluidSynth use by Josh Green <jgreen@users.sourceforge.net>
  27.  * September 8, 2009 from glib 2.18.4
  28.  * 
  29.  * - Self contained (no dependencies on glib)
  30.  * - changed names to fluid_hashtable_...
  31.  */
  32. #ifndef _FLUID_HASH_H
  33. #define _FLUID_HASH_H
  34. #include "fluidsynth_priv.h"
  35. #include "fluid_list.h"
  36. #include "fluid_sys.h"
  37. /* Extracted from gtypes.h */
  38. typedef void (*fluid_destroy_notify_t)(void *data);
  39. typedef unsigned int (*fluid_hash_func_t)(const void *key);
  40. typedef int (*fluid_equal_func_t)(const void *a, const void *b);
  41. /* End gtypes.h extraction */
  42. typedef int (*fluid_hr_func_t)(void *key, void *value, void *user_data);
  43. typedef struct _fluid_hashtable_iter_t fluid_hashtable_iter_t;
  44. typedef struct _fluid_hashnode_t      fluid_hashnode_t;
  45. struct _fluid_hashnode_t
  46. {
  47.   void *key;
  48.   void *value;
  49.   fluid_hashnode_t *next;
  50.   unsigned int key_hash;
  51. };
  52. struct _fluid_hashtable_t
  53. {
  54.   int size;
  55.   int nnodes;
  56.   fluid_hashnode_t **nodes;
  57.   fluid_hash_func_t hash_func;
  58.   fluid_equal_func_t key_equal_func;
  59.   volatile int ref_count;
  60.   fluid_destroy_notify_t key_destroy_func;
  61.   fluid_destroy_notify_t value_destroy_func;
  62.   fluid_rec_mutex_t mutex;          // Optionally used in other modules (fluid_settings.c for example)
  63. };
  64. struct _fluid_hashtable_iter_t
  65. {
  66.   /*< private >*/
  67.   void * dummy1;
  68.   void * dummy2;
  69.   void * dummy3;
  70.   int dummy4;
  71.   int dummy5; // Bool
  72.   void * dummy6;
  73. };
  74. fluid_hashtable_t* new_fluid_hashtable (fluid_hash_func_t hash_func,
  75.                                         fluid_equal_func_t key_equal_func);
  76. fluid_hashtable_t* new_fluid_hashtable_full (fluid_hash_func_t hash_func,
  77.                                               fluid_equal_func_t key_equal_func,
  78.                                               fluid_destroy_notify_t key_destroy_func,
  79.                                               fluid_destroy_notify_t value_destroy_func);
  80. void delete_fluid_hashtable(fluid_hashtable_t *hashtable);
  81. void fluid_hashtable_iter_init (fluid_hashtable_iter_t *iter, fluid_hashtable_t *hashtable);
  82. int fluid_hashtable_iter_next (fluid_hashtable_iter_t *iter, void **key, void **value);
  83. fluid_hashtable_t *fluid_hashtable_iter_get_hash_table (fluid_hashtable_iter_t *iter);
  84. void fluid_hashtable_iter_remove (fluid_hashtable_iter_t *iter);
  85. void fluid_hashtable_iter_steal (fluid_hashtable_iter_t *iter);
  86. fluid_hashtable_t* fluid_hashtable_ref (fluid_hashtable_t *hashtable);
  87. void fluid_hashtable_unref (fluid_hashtable_t *hashtable);
  88. void *fluid_hashtable_lookup (fluid_hashtable_t *hashtable, const void *key);
  89. int fluid_hashtable_lookup_extended (fluid_hashtable_t *hashtable, const void *lookup_key,
  90.                                       void **orig_key, void **value);
  91. void fluid_hashtable_insert (fluid_hashtable_t *hashtable, void *key, void *value);
  92. void fluid_hashtable_replace (fluid_hashtable_t *hashtable, void *key, void *value);
  93. int fluid_hashtable_remove (fluid_hashtable_t *hashtable, const void *key);
  94. int fluid_hashtable_steal (fluid_hashtable_t *hashtable, const void *key);
  95. void fluid_hashtable_remove_all (fluid_hashtable_t *hashtable);
  96. void fluid_hashtable_steal_all (fluid_hashtable_t *hashtable);
  97. unsigned int fluid_hashtable_foreach_steal (fluid_hashtable_t *hashtable,
  98.                                              fluid_hr_func_t func, void *user_data);
  99. void fluid_hashtable_foreach (fluid_hashtable_t *hashtable, fluid_hr_func_t func,
  100.                                void *user_data);
  101. void *fluid_hashtable_find (fluid_hashtable_t *hashtable, fluid_hr_func_t predicate,
  102.                              void *user_data);
  103. unsigned int fluid_hashtable_size (fluid_hashtable_t *hashtable);
  104. fluid_list_t *fluid_hashtable_get_keys (fluid_hashtable_t *hashtable);
  105. fluid_list_t *fluid_hashtable_get_values (fluid_hashtable_t *hashtable);
  106. int fluid_str_equal (const void *v1, const void *v2);
  107. unsigned int fluid_str_hash (const void *v);
  108. int fluid_direct_equal (const void *v1, const void *v2);
  109. unsigned int fluid_direct_hash (const void *v);
  110. int fluid_int_equal (const void *v1, const void *v2);
  111. unsigned int fluid_int_hash (const void *v);
  112. #endif /* _FLUID_HASH_H */