aboutsummaryrefslogtreecommitdiff
path: root/gfsm/gfsm/src/libgfsm/gfsmState.hi
diff options
context:
space:
mode:
Diffstat (limited to 'gfsm/gfsm/src/libgfsm/gfsmState.hi')
-rw-r--r--gfsm/gfsm/src/libgfsm/gfsmState.hi144
1 files changed, 144 insertions, 0 deletions
diff --git a/gfsm/gfsm/src/libgfsm/gfsmState.hi b/gfsm/gfsm/src/libgfsm/gfsmState.hi
new file mode 100644
index 0000000..15b2669
--- /dev/null
+++ b/gfsm/gfsm/src/libgfsm/gfsmState.hi
@@ -0,0 +1,144 @@
+
+/*=============================================================================*\
+ * File: gfsmState.hi
+ * Author: Bryan Jurish <moocow@ling.uni-potsdam.de>
+ * Description: finite state machine library: states: inline definitions
+ *
+ * Copyright (c) 2004-2007 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 <gfsmMem.h>
+
+/*======================================================================
+ * Methods: Constructors etc.
+ */
+
+/*--------------------------------------------------------------
+ * new_full()
+ */
+GFSM_INLINE
+gfsmState *gfsm_state_new_full(gboolean is_final, gfsmArcList *arcs)
+{
+ gfsmState *s = g_new(gfsmState,1);
+ s->is_valid = TRUE;
+ s->is_final = is_final;
+ s->arcs = arcs;
+ return s;
+}
+
+/*--------------------------------------------------------------
+ * new()
+ */
+GFSM_INLINE
+gfsmState *gfsm_state_new(void)
+{
+ return gfsm_state_new_full(FALSE, NULL);
+}
+
+/*--------------------------------------------------------------
+ * clear()
+ */
+GFSM_INLINE
+void gfsm_state_clear(gfsmState *s)
+{
+ gfsm_arclist_free(s->arcs);
+ s->is_valid = FALSE;
+ s->is_final = FALSE;
+ s->arcs = NULL;
+}
+
+/*--------------------------------------------------------------
+ * clone()
+ */
+GFSM_INLINE
+gfsmState *gfsm_state_copy(gfsmState *dst, const gfsmState *src)
+{
+ gfsm_state_clear(dst);
+ if (!src->is_valid) return dst;
+ dst->is_valid = src->is_valid;
+ dst->is_final = src->is_final;
+ //dst->arcs = g_slist_concat(gfsm_arclist_clone(src->arcs), dst->arcs);
+ dst->arcs = gfsm_arclist_clone(src->arcs);
+ return dst;
+}
+
+
+/*--------------------------------------------------------------
+ * free()
+ */
+GFSM_INLINE
+void gfsm_state_free(gfsmState *s, gboolean free_arcs)
+{
+ if (free_arcs && s->arcs) gfsm_arclist_free(s->arcs);
+ g_free(s);
+}
+
+/*--------------------------------------------------------------
+ * close()
+ */
+GFSM_INLINE
+void gfsm_state_close(gfsmState *s)
+{
+ if (s->arc_data_temp) {
+ //-- data=temp, list=temp
+ gfsm_arclist_free(s->arcs);
+ s->arcs = NULL;
+ }
+#if 0 //-- only sensible for GSList arclists
+ else if (s->arc_list_temp) {
+ //-- data=shared, list=temp
+ g_slist_free(s->arcs);
+ s->arcs = NULL;
+ }
+#endif
+ if (s->is_temp) { g_free(s); }
+}
+
+/*======================================================================
+ * Methods: Accessors
+ */
+
+/*--------------------------------------------------------------
+ * is_ok()
+ */
+GFSM_INLINE
+gboolean gfsm_state_is_ok(const gfsmState *s)
+{ return s && s->is_valid; }
+
+
+/*--------------------------------------------------------------
+ * is_final()
+ */
+GFSM_INLINE
+gboolean gfsm_state_is_final(const gfsmState *s)
+{ return s && s->is_final; }
+
+/*--------------------------------------------------------------
+ * set_final()
+ */
+GFSM_INLINE
+void gfsm_state_set_final(gfsmState *s, gboolean is_final)
+{ s->is_final=is_final; }
+
+/*--------------------------------------------------------------
+ * out_degree()
+ */
+GFSM_INLINE
+guint gfsm_state_out_degree(const gfsmState *s)
+{
+ return gfsm_arclist_length(s->arcs);
+}