int EGLPNUM_TYPENAME_ILLmps_int_sos_mode ( EGLPNUM_TYPENAME_ILLread_mps_state * state) { if (!strcmp (state->field, "'INTORG'")) { if (state->intvar) { return !EGLPNUM_TYPENAME_ILLmps_error (state, "'INTEND' expected.\n"); } else { state->intvar = 1; ILL_RESULT (0, "EGLPNUM_TYPENAME_ILLmps_int_sos_mode"); } } if (!strcmp (state->field, "'INTEND'")) { if (state->intvar) { state->intvar = 0; ILL_RESULT (0, "EGLPNUM_TYPENAME_ILLmps_int_sos_mode"); } else { return !EGLPNUM_TYPENAME_ILLmps_error (state, "'INTORG' expected.\n"); } } if (!strcmp (state->field, "'SOSORG'")) { if (state->sosvar) { return !EGLPNUM_TYPENAME_ILLmps_error (state, "'SOSEND' expected.\n"); } else { state->sosvar = 1; ILL_RESULT (0, "EGLPNUM_TYPENAME_ILLmps_int_sos_mode"); } } if (!strcmp (state->field, "'SOSEND'")) { if (state->sosvar) { state->sosvar = 0; ILL_RESULT (0, "EGLPNUM_TYPENAME_ILLmps_int_sos_mode"); } else { return !EGLPNUM_TYPENAME_ILLmps_error (state, "'SOSORG' expected.\n"); } } return EGLPNUM_TYPENAME_ILLmps_error (state, "%s is not a MARKER field.\n", state->field); }
int mpq_ILLmps_next_bound (mpq_ILLread_mps_state * state, mpq_t * coef) { int len = 0, sign = 1; char c, *p; if (!mpq_mps_skip_comment (state)) { c = *state->p; if (c == '-') { sign = -1; len = 1; } else { if (c == '+') { len = 1; } } if (!strncasecmp (state->p + len, "INFINITY", (size_t) 8)) { len += 8; } else { if (!strncasecmp (state->p + len, "INF", (size_t) 3)) { len += 3; } } if (len > 1) { state->p += len; p = state->p; mpq_mps_skip_comment (state); if (!mpq_END_LINE (state->p) && p == state->p) { /* found no blanks so this INF/INFINITY is the prefix of something else */ state->p -= len; return 1; /* no coef found */ } else { if (sign == 1) mpq_EGlpNumCopy (*coef, mpq_ILL_MAXDOUBLE); else mpq_EGlpNumCopy (*coef, mpq_ILL_MINDOUBLE); state->field_num++; ILL_RESULT (0, "mpq_ILLmps_next_bound"); } } if (mpq_get_double (state, 0, coef)) { ILL_RESULT (0, "mpq_ILLmps_next_bound"); } else { ILL_RESULT (1, "mpq_ILLmps_next_bound"); /* no coef found */ } } ILL_RETURN (1, "mpq_ILLmps_next_bound"); }
int EGLPNUM_TYPENAME_ILLmps_state_init ( EGLPNUM_TYPENAME_ILLread_mps_state * state, EGLPNUM_TYPENAME_qsline_reader * file, const char *fname) { int i, rval = 0; ILL_FAILtrue (file == 0, "need file"); state->p = 0; state->file_name = fname; state->file = file; for (i = 0; i < ILL_MPS_N_SECTIONS; i++) { state->section[i] = 0; } state->active = ILL_MPS_NONE; state->intvar = 0; state->sosvar = 0; state->line_num = 0; state->p = 0; state->obj = 0; state->line[0] = '\0'; state->key[0] = '\0'; state->field[0] = '\0'; CLEANUP: ILL_RESULT (rval, "EGLPNUM_TYPENAME_ILLmps_state_init"); }
int mpq_ILLmps_next_coef (mpq_ILLread_mps_state * state, mpq_t * coef) { int len = 0; if (!mpq_mps_skip_comment (state)) { len = mpq_get_double (state, 0, coef); } ILL_RESULT (!(len > 0), "mpq_ILLmps_next_coef"); }
int EGLPNUM_TYPENAME_ILLmps_next_coef ( EGLPNUM_TYPENAME_ILLread_mps_state * state, EGLPNUM_TYPE * coef) { int len = 0; if (!mps_skip_comment (state)) { len = get_double (state, 0, coef); } ILL_RESULT (!(len > 0), "EGLPNUM_TYPENAME_ILLmps_next_coef"); }
int mpq_ILLmps_set_section (mpq_ILLread_mps_state * state, const ILLmps_section sec) { int rval = 0; ILL_FAILfalse (sec != ILL_MPS_NONE, "must be in a proper section"); if (state->section[sec]) { rval = mpq_ILLmps_error (state, "Two %s sections.\n", mpq_ILLmps_section_name[sec]); } state->section[sec]++; state->active = sec; CLEANUP: ILL_RESULT (rval, "mpq_ILLmps_set_section"); }
static char mpq_get_double (mpq_ILLread_mps_state * state, int peek, mpq_t * coef) { char ok = 0; int len, rval = 0; ILL_FAILfalse (state != 0, "must have state"); if (mpq_mps_skip_comment (state)) return 0; len = mpq_ILLget_value (state->p, coef); if (len > 0) { if (!peek) { state->p += len; state->field_num++; } ok = 1; } CLEANUP: ILL_RESULT (ok, "mpq_get_double"); }