diff options
Diffstat (limited to 'gee/hashable.c')
-rw-r--r-- | gee/hashable.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/gee/hashable.c b/gee/hashable.c new file mode 100644 index 0000000..9e25224 --- /dev/null +++ b/gee/hashable.c @@ -0,0 +1,101 @@ +/* hashable.c generated by valac 0.18.0, the Vala compiler + * generated from hashable.vala, do not modify */ + +/* hashable.vala + * + * Copyright (C) 2010 Maciej Piechotka + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: + * Maciej Piechotka <uzytkwonik2@gmail.com> + */ + +#include <glib.h> +#include <glib-object.h> + + +#define GEE_TYPE_HASHABLE (gee_hashable_get_type ()) +#define GEE_HASHABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEE_TYPE_HASHABLE, GeeHashable)) +#define GEE_IS_HASHABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEE_TYPE_HASHABLE)) +#define GEE_HASHABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GEE_TYPE_HASHABLE, GeeHashableIface)) + +typedef struct _GeeHashable GeeHashable; +typedef struct _GeeHashableIface GeeHashableIface; + +struct _GeeHashableIface { + GTypeInterface parent_iface; + guint (*hash) (GeeHashable* self); + gboolean (*equal_to) (GeeHashable* self, gconstpointer object); +}; + + + +GType gee_hashable_get_type (void) G_GNUC_CONST; +guint gee_hashable_hash (GeeHashable* self); +gboolean gee_hashable_equal_to (GeeHashable* self, gconstpointer object); + + +/** + * Computes hash for an objects. Two hashes of equal objects have to be + * equal. Hash have to not change during lifetime of object. + * + * @return hash of an object + */ +guint gee_hashable_hash (GeeHashable* self) { + g_return_val_if_fail (self != NULL, 0U); + return GEE_HASHABLE_GET_INTERFACE (self)->hash (self); +} + + +/** + * Compares this object with the specifed object. + * + * @return true if objects are equal + */ +gboolean gee_hashable_equal_to (GeeHashable* self, gconstpointer object) { + g_return_val_if_fail (self != NULL, FALSE); + return GEE_HASHABLE_GET_INTERFACE (self)->equal_to (self, object); +} + + +static void gee_hashable_base_init (GeeHashableIface * iface) { + static gboolean initialized = FALSE; + if (!initialized) { + initialized = TRUE; + } +} + + +/** + * This interface defines a hash function amongs instances of each class + * implementing it. + * + * @see Comparable + */ +GType gee_hashable_get_type (void) { + static volatile gsize gee_hashable_type_id__volatile = 0; + if (g_once_init_enter (&gee_hashable_type_id__volatile)) { + static const GTypeInfo g_define_type_info = { sizeof (GeeHashableIface), (GBaseInitFunc) gee_hashable_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL }; + GType gee_hashable_type_id; + gee_hashable_type_id = g_type_register_static (G_TYPE_INTERFACE, "GeeHashable", &g_define_type_info, 0); + g_type_interface_add_prerequisite (gee_hashable_type_id, G_TYPE_OBJECT); + g_once_init_leave (&gee_hashable_type_id__volatile, gee_hashable_type_id); + } + return gee_hashable_type_id__volatile; +} + + + |