Пример #1
0
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;
}
Пример #2
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");
}