00001 #include "MCF1_var.hpp"
00002
00003
00004
00005 void MCF1_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 MCF1_var::MCF1_var(BCP_buffer& buf) :
00017
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 );
00027 buf.unpack(weight);
00028 set_obj(weight);
00029 }
00030
00031
00032
00033 void MCF1_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 MCF1_branching_var::MCF1_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 MCF1_pack_var(const BCP_var_algo* var, BCP_buffer& buf)
00059 {
00060 const MCF1_var* v = dynamic_cast<const MCF1_var*>(var);
00061 if (v) {
00062 int type = 0;
00063 buf.pack(type);
00064 v->pack(buf);
00065 return;
00066 }
00067 const MCF1_branching_var* bv = dynamic_cast<const MCF1_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* MCF1_unpack_var(BCP_buffer& buf)
00079 {
00080 int type;
00081 buf.unpack(type);
00082 switch (type) {
00083 case 0: return new MCF1_var(buf);
00084 case 1: return new MCF1_branching_var(buf);
00085 default: throw BCP_fatal_error("MCF1_unpack_var: bad var type");
00086 }
00087 return NULL;
00088 }
00089