aboutsummaryrefslogtreecommitdiff
path: root/gfsm/gfsm/src/libgfsm/tests/arctab-1test.c
blob: d4cdb4b890ebf56c2a0461a5b5e37dd6f2ec915b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <gfsm.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
  const char *infilename = "-";
  const char *prog = argv[0];
  gfsmAutomaton *fsm=NULL;
  gfsmError     *err=NULL;
  gfsmArcTableIndex *ix=NULL;
  gfsmArcLabelIndex *lx=NULL;

  if (argc > 1) { infilename = argv[1]; }

  //-- load automaton
  fprintf(stderr, "%s: loading file: '%s'... ", prog,infilename); fflush(stderr);
  fsm = gfsm_automaton_new();
  if ( !(gfsm_automaton_load_bin_filename(fsm,infilename,&err)) ) {
    fprintf(stderr, "FAILED: %s\n", (err ? err->message : "?"));
    exit(1);
  }
  fprintf(stderr, "loaded.\n"); fflush(stderr);

  //-- ArcTableIndex
  fprintf(stderr, "%s: creating ArcTableIndex... ", prog); fflush(stderr);
  if ( !(ix = gfsm_automaton_to_arc_table_index(fsm,ix)) ) {
    fprintf(stderr, "FAILED\n");
    exit(2);
  }
  fprintf(stderr, "created.\n"); fflush(stderr);
  //
  //-- sort table (todo: check for existing sort mode?!)
  fprintf(stderr, "%s: sorting ArcTableIndex (priority sort)... ", prog); fflush(stderr);
  gfsm_arc_table_index_priority_sort(ix,gfsmASP_LW,fsm->sr);
  fprintf(stderr, "sorted.\n"); fflush(stderr);

  //-- ArcLabelIndex
  fprintf(stderr, "%s: creating ArcLabelIndex... ", prog); fflush(stderr);
  if ( !(lx = gfsm_automaton_to_arc_label_index_lower(fsm,lx)) ) {
    fprintf(stderr, "FAILED\n");
    exit(3);
  }
  fprintf(stderr, "created.\n"); fflush(stderr);

  //-- cleanup
  fprintf(stderr, "%s: cleanup... ", prog); fflush(stderr);
  gfsm_automaton_free(fsm);
  gfsm_arc_table_index_free(ix);
  gfsm_arc_label_index_free(lx);
  fprintf(stderr, "done.\n"); fflush(stderr);

  return 0;
}