10 #include "patternsp.h"
11 #include "patternprob.h"
14 /* We try to avoid needlessly reloading probability dictionary
15 * since it may take rather long time. */
16 static struct pattern_pdict
*cached_dict
;
18 struct pattern_pdict
*
19 pattern_pdict_init(char *filename
, struct pattern_config
*pc
)
25 filename
= "patterns.prob";
26 FILE *f
= fopen(filename
, "r");
29 fprintf(stderr
, "No pattern probtable, will not use learned patterns.\n");
33 struct pattern_pdict
*dict
= calloc2(1, sizeof(*dict
));
35 dict
->table
= calloc2(pc
->spat_dict
->nspatials
+ 1, sizeof(*dict
->table
));
39 while (fgets(sbuf
, sizeof(sbuf
), f
)) {
40 struct pattern_prob
*pb
= calloc2(1, sizeof(*pb
));
44 if (buf
[0] == '#') continue;
45 while (isspace(*buf
)) buf
++;
46 while (!isspace(*buf
)) buf
++; // we recompute the probability
47 while (isspace(*buf
)) buf
++;
48 c
= strtol(buf
, &buf
, 10);
49 while (isspace(*buf
)) buf
++;
50 o
= strtol(buf
, &buf
, 10);
51 pb
->prob
= (floating_t
) c
/ o
;
52 while (isspace(*buf
)) buf
++;
53 str2pattern(buf
, &pb
->p
);
55 uint32_t spi
= pattern2spatial(dict
, &pb
->p
);
56 if (!dict
->table
[spi
]) {
57 dict
->table
[spi
] = pb
;
59 struct pattern_prob
*ppb
= dict
->table
[spi
];
60 while (ppb
->next
) ppb
= ppb
->next
;
68 fprintf(stderr
, "Loaded %d pattern-probability pairs.\n", i
);