6 dtepack(Fmt *f, DTExpr *e)
10 fmtprint(f, "e%d\n", e->n);
11 for(i = 0; i < e->n; i++)
12 fmtprint(f, "%#.8ux\n", e->b[i]);
16 dtgpack(Fmt *f, DTActGr *g)
20 fmtprint(f, "g%ud\n", g->id);
25 fmtprint(f, "a%d\n", g->nact);
26 for(i = 0; i < g->nact; i++){
27 fmtprint(f, "t%d\n", g->acts[i].type);
28 fmtprint(f, "s%d\n", g->acts[i].size);
29 dtepack(f, g->acts[i].p);
35 dtclpack(Fmt *f, DTClause *c)
39 fmtprint(f, "c%d\n", c->nprob);
40 for(i = 0; i < c->nprob; i++)
41 fmtprint(f, "%s\n", c->probs[i]);
46 u32unpack(char *s, u32int *np)
50 *np = strtoul(s, &r, 0);
51 if(r == s || *r != '\n') return nil;
56 dteunpack(char *s, DTExpr **rp)
63 if(*s++ != 'e') return nil;
65 if(s == nil) return nil;
66 e = dtmalloc(sizeof(DTExpr) + n * sizeof(u32int));
68 e->b = (void*)(e + 1);
69 for(i = 0; i < n; i++){
70 s = u32unpack(s, &e->b[i]);
86 for(i = 0; i < g->nact; i++)
95 dtgunpack(char *s, DTActGr **rp)
102 g = dtmalloc(sizeof(DTActGr));
105 if(*s++ != 'g') goto fail;
106 s = u32unpack(s, &g->id);
107 if(s == nil) goto fail;
111 s = dteunpack(s, &g->pred);
112 if(s == nil) goto fail;
115 s = u32unpack(s, &n);
116 if(s == nil) goto fail;
117 g->acts = dtmalloc(n * sizeof(DTAct));
119 for(i = 0; i < n; i++){
120 if(*s++ != 't') goto fail;
121 s = u32unpack(s, (u32int *) &g->acts[i].type);
122 if(s == nil) goto fail;
123 if(*s++ != 's') goto fail;
124 s = u32unpack(s, (u32int *) &g->acts[i].size);
125 if(s == nil) goto fail;
126 s = dteunpack(s, &g->acts[i].p);
127 if(s == nil) goto fail;
128 switch(g->acts[i].type){
130 g->reclen += g->acts[i].size;
133 g->reclen += g->acts[i].size;
151 dtclunpack(char *s, DTClause **rp)
158 c = dtmalloc(sizeof(DTClause));
159 if(*s++ != 'c') goto fail;
160 s = u32unpack(s, (u32int*) &c->nprob);
161 if(s == nil) goto fail;
162 c->probs = dtmalloc(sizeof(char *) * c->nprob);
163 for(i = 0; i < c->nprob; i++){
165 if(e == nil) goto fail;
166 c->probs[i] = dtmalloc(e - s + 1);
167 memmove(c->probs[i], s, e - s);
170 s = dtgunpack(s, &c->gr);
171 if(s == nil) goto fail;
180 dtclfree(DTClause *c)
185 if(--c->gr->ref == 0)
187 for(i = 0; i < c->nprob; i++)