aboutsummaryrefslogtreecommitdiff
path: root/gfsm/gfsm/src/libgfsm/gfsmIndexedIO.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfsm/gfsm/src/libgfsm/gfsmIndexedIO.h')
-rw-r--r--gfsm/gfsm/src/libgfsm/gfsmIndexedIO.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/gfsm/gfsm/src/libgfsm/gfsmIndexedIO.h b/gfsm/gfsm/src/libgfsm/gfsmIndexedIO.h
new file mode 100644
index 0000000..f736645
--- /dev/null
+++ b/gfsm/gfsm/src/libgfsm/gfsmIndexedIO.h
@@ -0,0 +1,163 @@
+
+/*=============================================================================*\
+ * File: gfsmIndexedIO.h
+ * Author: Bryan Jurish <moocow@ling.uni-potsdam.de>
+ * Description: finite state machine library: indexed automata: I/O
+ *
+ * Copyright (c) 2007 Bryan Jurish.
+ *
+ * For information on usage and redistribution, and for a DISCLAIMER
+ * OF ALL WARRANTIES, see the file "COPYING" in this distribution.
+ *
+ * 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
+ *=============================================================================*/
+
+/** \file gfsmIndexedIO.h
+ * \brief Librarian routines for indexed automata.
+ */
+
+#ifndef _GFSM_INDEXED_IO_H
+#define _GFSM_INDEXED_IO_H
+
+#include <gfsmAutomatonIO.h>
+#include <gfsmIndexed.h>
+
+/*======================================================================
+ * Types
+ */
+/// Header info for binary files
+typedef struct {
+ gchar magic[16]; /**< magic header string "gfsm_indexed" */
+ gfsmVersionInfo version; /**< gfsm version which created the stored file */
+ gfsmVersionInfo version_min; /**< minimum gfsm version required to load the file */
+ gfsmAutomatonFlags flags; /**< automaton flags */
+ gfsmStateId root_id; /**< Id of root node */
+ gfsmStateId n_states; /**< number of stored states */
+ gfsmStateId n_arcs; /**< number of stored arcs */
+ guint32 srtype; /**< semiring type (cast to ::gfsmSRType) */
+ guint32 sort_mask; /**< arc-sort priorities (a ::gfsmArcCompMask) */
+ guint32 reserved2; /**< reserved */
+ guint32 reserved3; /**< reserved */
+} gfsmIndexedAutomatonHeader;
+
+/*======================================================================
+ * Constants
+ */
+
+/** Magic header string for stored ::gfsmIndexedAutomaton files */
+extern const gchar gfsm_indexed_header_magic[16];
+
+/** Minimum libgfsm version required for loading files stored by this version of libgfsm */
+extern const gfsmVersionInfo gfsm_indexed_version_bincompat_min_store;
+
+/** Minimum libgfsm version whose binary files this version of libgfsm can read */
+extern const gfsmVersionInfo gfsm_indexed_version_bincompat_min_check;
+
+/*======================================================================
+ * Methods: Binary I/O
+ */
+/// \name Indexed Automaton Methods: Binary I/O
+//@{
+
+/** Load an automaton header from a stored binary file.
+ * Returns TRUE iff the header looks valid. */
+gboolean gfsm_indexed_automaton_load_header(gfsmIndexedAutomatonHeader *hdr, gfsmIOHandle *ioh, gfsmError **errp);
+
+/** Load an automaton from a named binary file (implicitly clear()s \a fsm) */
+gboolean gfsm_indexed_automaton_load_bin_handle(gfsmIndexedAutomaton *fsm, gfsmIOHandle *ioh, gfsmError **errp);
+
+/** Load an automaton from a stored binary file (implicitly clear()s \a fsm) */
+gboolean gfsm_indexed_automaton_load_bin_file(gfsmIndexedAutomaton *fsm, FILE *f, gfsmError **errp);
+
+/** Load an automaton from a named binary file (implicitly clear()s \a fsm) */
+gboolean gfsm_indexed_automaton_load_bin_filename(gfsmIndexedAutomaton *fsm, const gchar *filename, gfsmError **errp);
+
+/** Load an automaton from an in-memory buffer */
+gboolean gfsm_indexed_automaton_load_bin_gstring(gfsmIndexedAutomaton *fsm, GString *gs, gfsmError **errp);
+
+/*--------------------------------------------------------------*/
+
+/** Store an automaton in binary form to a gfsmIOHandle* */
+gboolean gfsm_indexed_automaton_save_bin_handle(gfsmIndexedAutomaton *fsm, gfsmIOHandle *ioh, gfsmError **errp);
+
+/** Store an automaton in binary form to a file */
+gboolean gfsm_indexed_automaton_save_bin_file(gfsmIndexedAutomaton *fsm, FILE *f, gfsmError **errp);
+
+/** Store an automaton to a named binary file (no compression) */
+gboolean gfsm_indexed_automaton_save_bin_filename_nc(gfsmIndexedAutomaton *fsm, const gchar *filename, gfsmError **errp);
+
+/** Store an automaton to a named binary file, possibly compressing.
+ * Set \a zlevel=-1 for default compression, and
+ * set \a zlevel=0 for no compression, otherwise should be as for zlib (1 <= zlevel <= 9)
+ */
+gboolean gfsm_indexed_automaton_save_bin_filename(gfsmIndexedAutomaton *fsm, const gchar *filename, int zlevel, gfsmError **errp);
+
+/** Append an uncompressed binary automaton to an in-memory buffer */
+gboolean gfsm_indexed_automaton_save_bin_gstring(gfsmIndexedAutomaton *fsm, GString *gs, gfsmError **errp);
+
+//@}
+
+/*======================================================================
+ * Automaton Methods: Text I/O
+ */
+/// \name Automaton Methods: Text I/O (output only)
+//@{
+
+/** Print a ::gfsmIndexedAutomaton in Ma-Bell-compatible text-format to a ::gfsmIOHandle* */
+gboolean gfsm_indexed_automaton_print_handle (gfsmIndexedAutomaton *fsm,
+ gfsmIOHandle *ioh,
+ gfsmAlphabet *lo_alphabet,
+ gfsmAlphabet *hi_alphabet,
+ gfsmAlphabet *state_alphabet,
+ gfsmError **errp);
+
+
+/** Print an automaton in Ma-Bell-compatible text-format to a FILE* */
+gboolean gfsm_indexed_automaton_print_file_full (gfsmIndexedAutomaton *fsm,
+ FILE *f,
+ gfsmAlphabet *lo_alphabet,
+ gfsmAlphabet *hi_alphabet,
+ gfsmAlphabet *state_alphabet,
+ int zlevel,
+ gfsmError **errp);
+
+/** Convenience macro for printing to uncompresed all-numeric-id text streams */
+#define gfsm_indexed_automaton_print_file(fsm,f,errp) \
+ gfsm_indexed_automaton_print_file_full(fsm,f,NULL,NULL,NULL,0,errp)
+
+/** Print an automaton in Ma-Bell-compatible text-format to a named file */
+gboolean gfsm_indexed_automaton_print_filename_full (gfsmIndexedAutomaton *fsm,
+ const gchar *filename,
+ gfsmAlphabet *lo_alphabet,
+ gfsmAlphabet *hi_alphabet,
+ gfsmAlphabet *state_alphabet,
+ int zlevel,
+ gfsmError **errp);
+
+/** Convenience macro for printing to uncompressed all-numeric-id named text files */
+#define gfsm_indexed_automaton_print_filename(fsm,f,errp) \
+ gfsm_indexed_automaton_print_filename_full(fsm,f,NULL,NULL,NULL,0,errp)
+
+/** Print an automaton in Ma-Bell-compatible text-format to an in-memory buffer */
+gboolean gfsm_indexed_automaton_print_gstring_full (gfsmIndexedAutomaton *fsm,
+ GString *gs,
+ gfsmAlphabet *lo_alphabet,
+ gfsmAlphabet *hi_alphabet,
+ gfsmAlphabet *state_alphabet,
+ gfsmError **errp);
+
+//@}
+
+#endif /* _GFSM_INDEXED_IO_H */