char * has_ident(const char *name, char *first, char *last) { char *base; char *s, *t, *d, c; name = leaf_of(name); s = first; while ((t = base = strchr(s, '$')) != 0 && (t < last)) { t++; if ((s = exact(skip_camel(t), "Id")) != 0 || (s = exact(t, "Header")) != 0) { if (*s == '$') { return base; } else if ((*s == ':') && is_inline(t, '$')) { /* RCS identifier can have pathname prepended */ s = skip_white(s + 1); d = skip_text(s); c = *d; *d = EOS; while (is_inline(s, '/')) s++; *d = c; if ((s = same_name(s, name)) != 0 && (s = exact(s, ",v")) != 0 && isspace(*s)) return base; } } s = t; } s = first; while ((t = base = strchr(s, '@')) != 0 && (t < last)) { t++; if ((s = exact(t, "(#)")) != NULL) { t = s; /* some versions of SCCS don't do module-name */ if ((s = same_name(t, name)) != NULL) return base; t = skip_text(t); /* module-name, if any */ t = skip_white(t); if ((s = same_name(t, name)) != NULL) return base; } s = t; } return 0; }
dag<T>::dag(const char* file_name) { std::stringstream in; grab_content(file_name, in); skip_text(in, "problem name", false); skip_text(in, "number of primitives"); in >> num_of_prims; skip_text(in, "number of variables"); in >> num_of_vars; skip_text(in, "number of constraints"); in >> num_of_cons; skip_text(in, "number of nonzeros"); in >> num_of_nzeros; skip_text(in, "number of numeric constants"); in >> num_of_nums; // FIXME Error checking >=0 //-------------------------------------------------------------------------- Node = new node<T>*[num_of_prims]; for (int i=0; i<num_of_prims; ++i) Node[i] = 0; var = new T[num_of_vars]; tmp = new T[num_of_prims]; num = new T[num_of_nums]; // FIXME Defined variables are unused //dfv = new int[n_dfvs]; con = new T*[num_of_cons]; constraint_buffer = new T[num_of_cons]; //-------------------------------------------------------------------------- skip_text(in, "numeric constant values"); for (int i=0; i<num_of_nums; ++i) { double value; in >> value; num[i] = T(value); } //-------------------------------------------------------------------------- skip_text(in, "constraint indices in primitives"); for (int i=0; i<num_of_cons; ++i) { int index; in >> index; check_index(index, num_of_prims); con[i] = tmp + index; } //-------------------------------------------------------------------------- skip_text(in, "primitives"); for (int i=0; i<num_of_prims; ++i) { int arity; in >> arity; std::string op; in >> op; int index; in >> index; if (index != i) error("unexpected error"); if (arity == 1) { T* arg = get_arg(in, i); add_unary_primitive(op, i, arg); } else if (arity == 2) { T* arg1 = get_arg(in, i); T* arg2 = get_arg(in, i); add_binary_primitive(op, i, arg1, arg2); } else { error("incorrect arity"); } } //-------------------------------------------------------------------------- // FIXME Make it optional! skip_text(in, "initial point"); for (int i=0; i<num_of_vars; ++i) { double value; in >> value; var[i] = T(value); } //-------------------------------------------------------------------------- skip_text(in, "EOF"); }