/home/coin/SVN-release/OS-2.2.0/Bcp/examples/MCF-2/Member/MCF2_var.cpp

Go to the documentation of this file.
00001 #include "MCF2_var.hpp"
00002 
00003 //#############################################################################
00004 
00005 void MCF2_var::pack(BCP_buffer& buf) const
00006 {
00007     buf.pack(commodity);
00008     int numarcs = flow.getNumElements();
00009     buf.pack(flow.getIndices(), numarcs);
00010     buf.pack(flow.getElements(), numarcs);
00011     buf.pack(weight);
00012 }
00013 
00014 /*---------------------------------------------------------------------------*/
00015 
00016 MCF2_var::MCF2_var(BCP_buffer& buf) :
00017     // we don't know the onj coeff (weight) yet, so temporarily set it to 0
00018     BCP_var_algo(BCP_ContinuousVar, 0, 0, 2)
00019 {
00020     buf.unpack(commodity);
00021     int numarcs;
00022     int* ind;
00023     double* val;
00024     buf.unpack(ind, numarcs);
00025     buf.unpack(val, numarcs);
00026     flow.assignVector(numarcs, ind, val, false /*don't test for duplicates*/);
00027     buf.unpack(weight);
00028     set_obj(weight);
00029 }
00030 
00031 /*===========================================================================*/
00032 
00033 void MCF2_branching_var::pack(BCP_buffer& buf) const
00034 {
00035     buf.pack(commodity);
00036     buf.pack(arc_index);
00037     buf.pack(lb_child0);
00038     buf.pack(ub_child0);
00039     buf.pack(lb_child1);
00040     buf.pack(ub_child1);
00041 }
00042 
00043 /*---------------------------------------------------------------------------*/
00044 
00045 MCF2_branching_var::MCF2_branching_var(BCP_buffer& buf) :
00046     BCP_var_algo(BCP_BinaryVar, 0, 0, 1)
00047 {
00048     buf.unpack(commodity);
00049     buf.unpack(arc_index);
00050     buf.unpack(lb_child0);
00051     buf.unpack(ub_child0);
00052     buf.unpack(lb_child1);
00053     buf.unpack(ub_child1);
00054 }
00055 
00056 /*===========================================================================*/
00057 
00058 void MCF2_pack_var(const BCP_var_algo* var, BCP_buffer& buf)
00059 {
00060     const MCF2_var* v = dynamic_cast<const MCF2_var*>(var);
00061     if (v) {
00062         int type = 0;
00063         buf.pack(type);
00064         v->pack(buf);
00065         return;
00066     }
00067     const MCF2_branching_var* bv = dynamic_cast<const MCF2_branching_var*>(var);
00068     if (bv) {
00069         int type = 1;
00070         buf.pack(type);
00071         bv->pack(buf);
00072         return;
00073     }
00074 }
00075 
00076 /*---------------------------------------------------------------------------*/
00077 
00078 BCP_var_algo* MCF2_unpack_var(BCP_buffer& buf)
00079 {
00080     int type;
00081     buf.unpack(type);
00082     switch (type) {
00083     case 0: return new MCF2_var(buf);
00084     case 1: return new MCF2_branching_var(buf);
00085     default: throw BCP_fatal_error("MCF2_unpack_var: bad var type");
00086     }
00087     return NULL; // fake return
00088 }
00089 

Generated on Thu Aug 5 03:02:51 2010 by  doxygen 1.4.7