void insert(int intarget) { size_t nmemb; PATTERN_ *p; char **p2; str2pattern (); nmemb = n_patterns; p = lfind (buffer2, patterns, &nmemb, sizeof (PATTERN_), lfindpat); if (! p) { if (n_patterns == max_patterns) { max_patterns += 32; patterns = (PATTERN_ *) s_realloc (patterns, max_patterns * sizeof (PATTERN_)); } patterns [n_patterns].s = s_strdup (buffer2); patterns [n_patterns].n_forms = 0; patterns [n_patterns].max_forms = 0; patterns [n_patterns].i = 0; patterns [n_patterns].o = 0; patterns [n_patterns].used = 0; patterns [n_patterns].rejected = 0; patterns [n_patterns].forms = NULL; p = &(patterns [n_patterns]); n_patterns++; } if (intarget) p->i++; else p->o++; if (p->i + p->o >= minvar) p->used = 1; p2 = NULL; if (p->n_forms > 0) { nmemb = p->n_forms; p2 = lfind (buffer, p->forms, &nmemb, sizeof (char *), searchcmp); } if (! p2) { if (p->n_forms == p->max_forms) { p->max_forms += 32; p->forms = (char **) s_realloc (p->forms, p->max_forms * sizeof (char *)); } p->forms[p->n_forms] = s_strdup (buffer); p->n_forms++; } }
void prob_dict_init(char *filename, pattern_config_t *pc) { assert(!prob_dict); if (!filename) filename = "patterns_mm.gamma"; FILE *f = fopen_data_file(filename, "r"); if (!f) { if (DEBUGL(1)) fprintf(stderr, "%s not found, will not use mm patterns.\n", filename); return; } prob_dict = calloc2(1, prob_dict_t); prob_dict->table = calloc2(spat_dict->nspatials + 1, pattern_prob_t*); int i = 0; char sbuf[1024]; while (fgets(sbuf, sizeof(sbuf), f)) { pattern_prob_t *pb = calloc2(1, pattern_prob_t); //int c, o; char *buf = sbuf; if (buf[0] == '#') continue; while (isspace(*buf)) buf++; float gamma = strtof(buf, &buf); pb->gamma = gamma; while (isspace(*buf)) buf++; str2pattern(buf, &pb->p); assert(pb->p.n == 1); /* One gamma per feature, please ! */ uint32_t spi = feature2spatial(pc, &pb->p.f[0]); assert(spi <= spat_dict->nspatials); /* Bad patterns.spat / patterns.prob ? */ if (feature_has_gamma(pc, &pb->p.f[0])) die("%s: multiple gammas for feature %s\n", filename, pattern2sstr(&pb->p)); pb->next = prob_dict->table[spi]; prob_dict->table[spi] = pb; i++; } fclose(f); if (DEBUGL(1)) fprintf(stderr, "Loaded %d gammas.\n", i); }