aboutsummaryrefslogtreecommitdiff
path: root/gfsm/gfsm/src/libgfsm/gfsmUtils.c
diff options
context:
space:
mode:
Diffstat (limited to 'gfsm/gfsm/src/libgfsm/gfsmUtils.c')
-rw-r--r--gfsm/gfsm/src/libgfsm/gfsmUtils.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/gfsm/gfsm/src/libgfsm/gfsmUtils.c b/gfsm/gfsm/src/libgfsm/gfsmUtils.c
new file mode 100644
index 0000000..2fe8e1e
--- /dev/null
+++ b/gfsm/gfsm/src/libgfsm/gfsmUtils.c
@@ -0,0 +1,101 @@
+/*=============================================================================*\
+ * File: gfsmUtils.c
+ * Author: Bryan Jurish <moocow@ling.uni-potsdam.de>
+ * Description: finite state machine library
+ *
+ * Copyright (c) 2004 Bryan Jurish.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *=============================================================================*/
+
+#include <glib.h>
+#include <gfsmUtils.h>
+#include <gfsmError.h>
+#include <string.h>
+#include <errno.h>
+
+/*======================================================================
+ * glib utility functions
+ */
+
+/*--------------------------------------------------------------
+ * int_compare()
+ */
+gint gfsm_int_compare(gconstpointer a, gconstpointer b)
+{
+ return (GPOINTER_TO_INT(b) - GPOINTER_TO_INT(a));
+}
+
+/*--------------------------------------------------------------
+ * int_compare_data()
+ */
+gint gfsm_int_compare_data(gconstpointer a, gconstpointer b, gpointer data)
+{
+ return (GPOINTER_TO_INT(b) - GPOINTER_TO_INT(a));
+}
+
+/*--------------------------------------------------------------
+ * uint_compare()
+ */
+#define gfsm_uint_compare_code(a,b) \
+ ( GPOINTER_TO_UINT(a) < GPOINTER_TO_UINT(b) ? (-1) : (GPOINTER_TO_UINT(a) == GPOINTER_TO_UINT(b) ? 0 : 1) )
+ //( (gint) ((glong((guint)b)) - (glong((guint)a))) );
+
+gint gfsm_uint_compare(gconstpointer a, gconstpointer b)
+{
+ return gfsm_uint_compare_code(GPOINTER_TO_UINT(a),GPOINTER_TO_UINT(b));
+}
+
+/*--------------------------------------------------------------
+ * uint_compare_data()
+ */
+gint gfsm_uint_compare_data(gconstpointer a, gconstpointer b, gpointer data)
+{
+ return gfsm_uint_compare_code(a,b);
+}
+
+/*======================================================================
+ * Hash Utilties
+ */
+/*--------------------------------------------------------------
+ * gfsm_hash_clear_func()
+ */
+gboolean gfsm_hash_clear_func (gpointer key, gpointer value, gpointer user_data)
+{ return TRUE; };
+
+
+/*======================================================================
+ * File Utilties
+ */
+
+/*--------------------------------------------------------------
+ * open_filename()
+ */
+FILE *gfsm_open_filename(const char *filename, const char *mode, gfsmError **errp)
+{
+ FILE *f;
+ if (strcmp(filename,"-")==0) {
+ if (strchr(mode,'w')) f = stdout;
+ else f = stdin;
+ }
+ else if (!(f = fopen(filename,mode))) {
+ g_set_error(errp,
+ g_quark_from_static_string("gfsm"), //-- domain
+ g_quark_from_static_string("fopen"), //-- code
+ "open failed for file '%s': %s",
+ filename, strerror(errno));
+ }
+ return f;
+}