void ppassert(int op, char* pred, char* args) { register struct pplist* a; register struct ppsymbol* sym; register struct pplist* p; register struct pplist* q; if (!args) switch (op) { case DEFINE: goto mark; case UNDEF: a = 0; goto unmark; } if (a = (struct pplist*)hashget(pp.prdtab, pred)) { p = 0; q = a; while (q) { if (streq(q->value, args)) { if (op == DEFINE) return; q = q->next; if (p) p->next = q; else a = q; } else { p = q; q = q->next; } } if (op == UNDEF) { unmark: hashput(pp.prdtab, pred, a); if (sym = ppsymref(pp.symtab, pred)) sym->flags &= ~SYM_PREDICATE; return; } } if (op == DEFINE) { p = newof(0, struct pplist, 1, 0); p->next = a; p->value = strdup(args); hashput(pp.prdtab, NiL, p); mark: if ((pp.state & COMPILE) && pp.truncate) return; if (sym = ppsymset(pp.symtab, pred)) sym->flags |= SYM_PREDICATE; }
void compute(struct In *input, struct Out *output){ int i=0; /* for (i=0; i<SIZE-1; i++) input->data[i] = input->data[i] * input->data[i+1]; */ hashput(&(output->hash), input); hashget(input, &(output->hash)); }
static void process_line(char *line) { char *p; static char *msgid; BUG_ON(!line); p = strrchr(line, '\n'); if (p) *p = '\0'; if (!strncmp(line, "msgid", 5)) { if (msgid) warn("last msgid had no corresponding msgstr"); msgid = strdup(stripquotes(line + 5)); } else if (!strncmp(line, "msgstr", 6)) { if (!msgid) warn("msgstr without msgid"); hashput(msgid, stripquotes(line + 6)); xfree(msgid); } }