00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef dbl___ILL_RAWLP_H_
00025 #define dbl___ILL_RAWLP_H_
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include "trace.h"
00035 #include "dbl_lpdata.h"
00036 #include "dbl_iqsutil.h"
00037 #include "dbl_format.h"
00038 #include "dbl_lpdefs.h"
00039
00040 #define dbl_ILL_ISBLANK(p) \
00041 (((*(p))==' '||(*(p))=='\t'||(*(p))=='\r'||(*(p))=='\f') ? 1 : 0)
00042
00043
00044
00045
00046
00047
00048 typedef struct dbl_rawlpdata
00049 {
00050 char *name;
00051
00052 char *rhsname;
00053 char *rangesname;
00054 char *boundsname;
00055
00056 int objsense;
00057 int objindex;
00058
00059 int nrows;
00060 ILLsymboltab rowtab;
00061
00062 int sensesize;
00063 char *rowsense;
00064
00065 char *rhsind;
00066
00067 int rhssize;
00068 double *rhs;
00069 char *rangesind;
00070 struct dbl_colptr *ranges;
00071
00072 int ncols;
00073 ILLsymboltab coltab;
00074 int colsize;
00075 struct dbl_colptr **cols;
00076
00077 char *lbind;
00078 char *ubind;
00079 double *lower;
00080 double *upper;
00081
00082 int intsize;
00083 char *intmarker;
00084
00085
00086 char *refrow;
00087 int refrowind;
00088
00089 int is_sos_size;
00090 int *is_sos_member;
00091
00092
00093
00094 int nsos_member;
00095 int sos_weight_size;
00096 double *sos_weight;
00097
00098 int sos_col_size;
00099 int *sos_col;
00100
00101 int nsos;
00102 int sos_setsize;
00103 struct dbl_sosptr *sos_set;
00104
00105
00106 dbl_qserror_collector *error_collector;
00107 ILLptrworld ptrworld;
00108 }
00109 dbl_rawlpdata;
00110
00111 typedef struct dbl_colptr
00112 {
00113 double coef;
00114 struct dbl_colptr *next;
00115 int this_val;
00116 }
00117 dbl_colptr;
00118 extern dbl_colptr *dbl_ILLcolptralloc (
00119 ILLptrworld * p);
00120
00121 typedef struct dbl_sosptr
00122 {
00123 int nelem;
00124 int first;
00125 char type;
00126 }
00127 dbl_sosptr;
00128 extern const int dbl_ILL_SOS_TYPE1;
00129 extern const int dbl_ILL_SOS_TYPE2;
00130
00131 extern void dbl_ILLinit_rawlpdata (
00132 dbl_rawlpdata * lp,
00133 dbl_qserror_collector * collector);
00134 extern void dbl_ILLfree_rawlpdata (
00135 dbl_rawlpdata * lp);
00136 extern void dbl_ILLraw_clear_matrix (
00137 dbl_rawlpdata * lp);
00138
00139 extern const char *dbl_ILLraw_rowname (
00140 dbl_rawlpdata * lp,
00141 int i);
00142 extern const char *dbl_ILLraw_colname (
00143 dbl_rawlpdata * lp,
00144 int i);
00145
00146 extern int dbl_ILLraw_add_col (
00147 dbl_rawlpdata * lp,
00148 const char *name,
00149 int intmarker);
00150 extern int dbl_ILLraw_add_row (
00151 dbl_rawlpdata * lp,
00152 const char *name,
00153 int sense,
00154 const double rhs);
00155
00156 extern int dbl_ILLraw_add_col_coef (
00157 dbl_rawlpdata * lp,
00158 int colind,
00159 int rowind,
00160 double coef);
00161
00162 extern int dbl_ILLraw_init_ranges (
00163 dbl_rawlpdata * lp);
00164 extern int dbl_ILLraw_init_rhs (
00165 dbl_rawlpdata * lp);
00166
00167 extern int dbl_ILLraw_add_ranges_coef (
00168 dbl_rawlpdata * lp,
00169 int rowind,
00170 double coef);
00171
00172
00173 extern int dbl_ILLraw_add_sos (
00174 dbl_rawlpdata * lp,
00175 int sos_type);
00176
00177
00178 extern int dbl_ILLraw_add_sos_member (
00179 dbl_rawlpdata * lp,
00180 int colind);
00181
00182
00183 extern int dbl_ILLraw_is_mem_other_sos (
00184 dbl_rawlpdata * lp,
00185 int colind);
00186
00187 extern int dbl_ILLraw_set_rhs_name (
00188 dbl_rawlpdata * lp,
00189 const char *name,
00190 int *skip);
00191 extern int dbl_ILLraw_set_bounds_name (
00192 dbl_rawlpdata * lp,
00193 const char *name,
00194 int *skip);
00195 extern int dbl_ILLraw_set_ranges_name (
00196 dbl_rawlpdata * lp,
00197 const char *name,
00198 int *skip);
00199 extern void dbl_ILLprint_rawlpdata (
00200 dbl_rawlpdata * lp);
00201
00202 extern char *dbl_ILLraw_unique_name (
00203 ILLsymboltab * tab,
00204 char *prefix,
00205 int i);
00206 extern int dbl_ILLraw_fill_in_rownames (
00207 dbl_rawlpdata * lp);
00208
00209 extern int dbl_ILLraw_init_bounds (
00210 dbl_rawlpdata * lp);
00211
00212 extern const char *dbl_ILLraw_set_lowerBound (
00213 dbl_rawlpdata * lp,
00214 int i,
00215 double bnd);
00216 extern const char *dbl_ILLraw_set_upperBound (
00217 dbl_rawlpdata * lp,
00218 int i,
00219 double bnd);
00220 extern const char *dbl_ILLraw_set_fixedBound (
00221 dbl_rawlpdata * lp,
00222 int i,
00223 double bnd);
00224 extern const char *dbl_ILLraw_set_binaryBound (
00225 dbl_rawlpdata * lp,
00226 int i);
00227 extern const char *dbl_ILLraw_set_unbound (
00228 dbl_rawlpdata * lp,
00229 int colind);
00230 extern int dbl_ILLraw_fill_in_bounds (
00231 dbl_rawlpdata * lp);
00232
00233 extern int dbl_ILLraw_first_nondefault_bound (
00234 dbl_ILLlpdata * lp);
00235 extern int dbl_ILLraw_default_lower (
00236 dbl_ILLlpdata * lp,
00237 int i);
00238 extern int dbl_ILLraw_default_upper (
00239 dbl_ILLlpdata * lp,
00240 int i,
00241 int ri);
00242
00243 extern int dbl_ILLrawlpdata_to_lpdata (
00244 dbl_rawlpdata * raw,
00245 dbl_ILLlpdata * lp);
00246
00247 extern int dbl_ILLdata_error (
00248 dbl_qserror_collector * collector,
00249 const char *format,
00250 ...);
00251 extern void dbl_ILLdata_warn (
00252 dbl_qserror_collector * collector,
00253 const char *format,
00254 ...);
00255
00256 #endif