/* FALSE means, there is no further element */ static Bool set_range_iter_next( SetIter* iter, const Set* set, Tuple* tuple, int offset) { int val; Numb* numb; assert(set_range_iter_is_valid(iter)); assert(set_range_is_valid(set)); assert(tuple_is_valid(tuple)); assert(offset >= 0); assert(offset < tuple_get_dim(tuple)); if (iter->range.now > iter->range.last) return FALSE; val = idx_to_val(set->range.begin, set->range.step, iter->range.now); numb = numb_new_integer(val); tuple_set_elem(tuple, offset, elem_new_numb(numb)); numb_free(numb); iter->range.now++; return TRUE; }
void zpl_add_parameter(const char* def) { const char* warning = "--- Warning 175: Illegal syntax for command line define \"%s\" -- ignored\n"; Set* set; Symbol* sym; Numb* numb; Tuple* tuple; Entry* entry; char* name; char* value; assert(def != NULL); name = strdup(def); value = strchr(name, '='); if (value == NULL) { fprintf(stderr, warning, def); free(name); return; } *value = '\0'; value++; if (strlen(name) == 0 || strlen(value) == 0 || !is_valid_identifier(name)) { if (verbose > VERB_QUIET) fprintf(stderr, warning, def); free(name); return; } set = set_pseudo_new(); sym = symbol_new(str_new(name), SYM_ERR, set, 1, ENTRY_NULL); tuple = tuple_new(0); if (!numb_is_number(value)) entry = entry_new_strg(tuple, str_new(value)); else { numb = numb_new_ascii(value); entry = entry_new_numb(tuple, numb); numb_free(numb); } symbol_add_entry(sym, entry); tuple_free(tuple); set_free(set); free(name); }
/* ------------------------------------------------------------------------- * --- get_tuple * ------------------------------------------------------------------------- */ static void set_range_get_tuple( const Set* set, int idx, Tuple* tuple, int offset) { int val; Numb* numb; assert(set_range_is_valid(set)); assert(idx >= 0); assert(idx <= set->head.members); assert(tuple_is_valid(tuple)); assert(offset >= 0); assert(offset < tuple_get_dim(tuple)); val = idx_to_val(set->range.begin, set->range.step, idx); numb = numb_new_integer(val); tuple_set_elem(tuple, offset, elem_new_numb(numb)); numb_free(numb); }