X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Ftransformations.c;h=4d1e22e3b7a0230a3f556dd5e09f3d5b78ef1c96;hb=f5c108becd49d78f4898cab11352291f5689d24e;hp=f77c24f8b95095a832b416a756ac26fd53a4a13e;hpb=7eee0554f378481faf447e2d2e940f389d6b05ec;p=pspp-builds.git diff --git a/src/data/transformations.c b/src/data/transformations.c index f77c24f8..4d1e22e3 100644 --- a/src/data/transformations.c +++ b/src/data/transformations.c @@ -33,7 +33,7 @@ struct transformation /* Offset to add to EXECUTE's return value, if it returns a transformation index. Normally 0 but set to the starting index of a spliced chain after splicing. */ - int idx_ofs; + int idx_ofs; trns_finalize_func *finalize; /* Finalize proc. */ trns_proc_func *execute; /* Executes the transformation. */ trns_free_func *free; /* Garbage collector proc. */ @@ -41,7 +41,7 @@ struct transformation }; /* A chain of transformations. */ -struct trns_chain +struct trns_chain { struct transformation *trns; /* Array of transformations. */ size_t trns_cnt; /* Number of transformations. */ @@ -51,7 +51,7 @@ struct trns_chain /* Allocates and returns a new transformation chain. */ struct trns_chain * -trns_chain_create (void) +trns_chain_create (void) { struct trns_chain *chain = xmalloc (sizeof *chain); chain->trns = NULL; @@ -68,17 +68,17 @@ trns_chain_create (void) finalization the chain's contents are fixed, so that no more transformations may be added afterward. */ void -trns_chain_finalize (struct trns_chain *chain) +trns_chain_finalize (struct trns_chain *chain) { - if (!chain->finalized) + if (!chain->finalized) { size_t i; - for (i = 0; i < chain->trns_cnt; i++) + for (i = 0; i < chain->trns_cnt; i++) { struct transformation *trns = &chain->trns[i]; if (trns->finalize != NULL) - trns->finalize (trns->aux); + trns->finalize (trns->aux); } chain->finalized = true; } @@ -87,34 +87,34 @@ trns_chain_finalize (struct trns_chain *chain) /* Destroys CHAIN, finalizing it in the process if it has not already been finalized. */ bool -trns_chain_destroy (struct trns_chain *chain) +trns_chain_destroy (struct trns_chain *chain) { bool ok = true; - if (chain != NULL) + if (chain != NULL) { size_t i; - + /* Needed to ensure that the control stack gets cleared. */ trns_chain_finalize (chain); - - for (i = 0; i < chain->trns_cnt; i++) + + for (i = 0; i < chain->trns_cnt; i++) { struct transformation *trns = &chain->trns[i]; - if (trns->free != NULL) + if (trns->free != NULL) ok = trns->free (trns->aux) && ok; } free (chain->trns); free (chain); } - + return ok; } /* Returns true if CHAIN contains any transformations, false otherwise. */ bool -trns_chain_is_empty (const struct trns_chain *chain) +trns_chain_is_empty (const struct trns_chain *chain) { return chain->trns_cnt == 0; } @@ -125,7 +125,7 @@ trns_chain_is_empty (const struct trns_chain *chain) void trns_chain_append (struct trns_chain *chain, trns_finalize_func *finalize, trns_proc_func *execute, trns_free_func *free, - void *aux) + void *aux) { struct transformation *trns; @@ -147,25 +147,25 @@ trns_chain_append (struct trns_chain *chain, trns_finalize_func *finalize, and destroys SRC. Both DST and SRC must already be finalized. */ void -trns_chain_splice (struct trns_chain *dst, struct trns_chain *src) +trns_chain_splice (struct trns_chain *dst, struct trns_chain *src) { size_t i; - + assert (dst->finalized); assert (src->finalized); - if (dst->trns_cnt + src->trns_cnt > dst->trns_cap) + if (dst->trns_cnt + src->trns_cnt > dst->trns_cap) { dst->trns_cap = dst->trns_cnt + src->trns_cnt; dst->trns = xnrealloc (dst->trns, dst->trns_cap, sizeof *dst->trns); } - for (i = 0; i < src->trns_cnt; i++) + for (i = 0; i < src->trns_cnt; i++) { struct transformation *d = &dst->trns[i + dst->trns_cnt]; const struct transformation *s = &src->trns[i]; *d = *s; - d->idx_ofs += src->trns_cnt; + d->idx_ofs += src->trns_cnt; } dst->trns_cnt += src->trns_cnt; @@ -175,7 +175,7 @@ trns_chain_splice (struct trns_chain *dst, struct trns_chain *src) /* Returns the index that a transformation execution function may return to "jump" to the next transformation to be added. */ size_t -trns_chain_next (struct trns_chain *chain) +trns_chain_next (struct trns_chain *chain) { return chain->trns_cnt; } @@ -189,7 +189,7 @@ trns_chain_next (struct trns_chain *chain) due to "falling off the end" of the set of transformations. */ enum trns_result trns_chain_execute (struct trns_chain *chain, enum trns_result start, - struct ccase *c, const size_t *case_nr) + struct ccase *c, const size_t *case_nr) { size_t i; @@ -202,8 +202,8 @@ trns_chain_execute (struct trns_chain *chain, enum trns_result start, i++; else if (retval >= 0) i = retval + trns->idx_ofs; - else - return retval == TRNS_END_CASE ? i + 1 : retval; + else + return retval == TRNS_END_CASE ? i + 1 : retval; } return TRNS_CONTINUE;