00001
00002
00003 #ifndef _BCP_USER_H
00004 #define _BCP_USER_H
00005
00006
00007
00008 #include "CoinSmartPtr.hpp"
00009 #include "BCP_error.hpp"
00010 #include "BCP_message_single.hpp"
00011 #include "BCP_functions.hpp"
00012
00013 class BCP_var_algo;
00014 class BCP_cut_algo;
00015 class BCP_warmstart;
00016
00017
00018
00019 class BCP_user_data : public Coin::ReferencedObject {
00020 public:
00021 virtual ~BCP_user_data() {}
00022 };
00023
00024
00025
00026 class BCP_user_class {
00027 public:
00028 virtual ~BCP_user_class() {}
00029 };
00030
00031
00032
00048 class BCP_user_pack {
00049 public:
00055 BCP_user_class* user_class;
00056
00057 public:
00058 virtual ~BCP_user_pack() {}
00059
00060
00062 virtual void
00063 pack_warmstart(const BCP_warmstart* ws, BCP_buffer& buf,
00064 bool report_if_default = false)
00065 {
00066 if (report_if_default) {
00067 printf("BCP_user_pack : default pack_warmstart() executed.\n");
00068 }
00069 BCP_pack_warmstart(ws, buf);
00070 }
00071
00073 virtual BCP_warmstart*
00074 unpack_warmstart(BCP_buffer& buf,
00075 bool report_if_default = false)
00076 {
00077 if (report_if_default) {
00078 printf("BCP_user_pack : default unpack_warmstart() executed.\n");
00079 }
00080 return BCP_unpack_warmstart(buf);
00081 }
00082
00083
00085 virtual void
00086 pack_var_algo(const BCP_var_algo* var, BCP_buffer& buf)
00087 {
00088 throw BCP_fatal_error("\
00089 BCP_user_pack::pack_var_algo() invoked but not overridden!\n");
00090 }
00091
00093 virtual BCP_var_algo* unpack_var_algo(BCP_buffer& buf)
00094 {
00095 throw BCP_fatal_error("\
00096 BCP_user_pack::unpack_var_algo() invoked but not overridden!\n");
00097 return 0;
00098 }
00099
00100
00102 virtual void pack_cut_algo(const BCP_cut_algo* cut, BCP_buffer& buf)
00103 {
00104 throw BCP_fatal_error("\
00105 BCP_user_pack::pack_cut_algo() invoked but not overridden!\n");
00106 }
00107
00109 virtual BCP_cut_algo* unpack_cut_algo(BCP_buffer& buf)
00110 {
00111 throw BCP_fatal_error("\
00112 BCP_user_pack::unpack_cut_algo() invoked but not overridden!\n");
00113 return 0;
00114 }
00115
00116
00118 virtual void
00119 pack_user_data(const BCP_user_data* ud, BCP_buffer& buf)
00120 {
00121 throw BCP_fatal_error("\
00122 BCP_user_pack::pack_user_data() invoked but not overridden!\n");
00123 }
00124
00126 virtual BCP_user_data* unpack_user_data(BCP_buffer& buf)
00127 {
00128 throw BCP_fatal_error("\
00129 BCP_user_pack::unpack_user_data() invoked but not overridden!\n");
00130 }
00131 };
00132
00133
00134
00135 class BCP_tm_user;
00136 class BCP_ts_user;
00137 class BCP_lp_user;
00138 class BCP_vg_user;
00139 class BCP_cg_user;
00140 class BCP_vp_user;
00141 class BCP_cp_user;
00142
00143 class BCP_tm_prob;
00144 class BCP_ts_prob;
00145 class BCP_lp_prob;
00146 class BCP_vg_prob;
00147 class BCP_cg_prob;
00148 class BCP_vp_prob;
00149 class BCP_cp_prob;
00150
00151 class BCP_proc_id;
00152 class BCP_message_environment;
00153
00160 class USER_initialize {
00161 public:
00165 virtual ~USER_initialize() {}
00168
00175 virtual BCP_message_environment * msgenv_init(int argc, char* argv[]);
00178
00186
00187 virtual BCP_tm_user * tm_init(BCP_tm_prob& p,
00188 const int argnum,
00189 const char * const * arglist) {
00190 throw BCP_fatal_error("USER_initialize::tm_init() missing.\n");
00191 return 0;
00192 }
00194 virtual BCP_ts_user * ts_init(BCP_ts_prob& p) {
00195
00196
00197 return 0;
00198 }
00200 virtual BCP_lp_user * lp_init(BCP_lp_prob& p) {
00201 throw BCP_fatal_error("USER_initialize::lp_init() missing.\n");
00202 return 0;
00203 }
00205 virtual BCP_vg_user * vg_init(BCP_vg_prob& p) {
00206 throw BCP_fatal_error("USER_initialize::vg_init() missing.\n");
00207 return 0;
00208 }
00210 virtual BCP_cg_user * cg_init(BCP_cg_prob& p) {
00211 throw BCP_fatal_error("USER_initialize::cg_init() missing.\n");
00212 return 0;
00213 }
00215 virtual BCP_vp_user * vp_init(BCP_vp_prob& p) {
00216 throw BCP_fatal_error("USER_initialize::vp_init() missing.\n");
00217 return 0;
00218 }
00220 virtual BCP_cp_user * cp_init(BCP_cp_prob& p) {
00221 throw BCP_fatal_error("USER_initialize::cp_init() missing.\n");
00222 return 0;
00223 }
00225 virtual BCP_user_pack* packer_init(BCP_user_class* p) {
00226 return NULL;
00227 }
00229 };
00230
00231
00232
00239 int bcp_main(int argc, char* argv[], USER_initialize* user_init);
00240
00241 #endif