本文整理汇总了C++中msg_ptr::trans方法的典型用法代码示例。如果您正苦于以下问题:C++ msg_ptr::trans方法的具体用法?C++ msg_ptr::trans怎么用?C++ msg_ptr::trans使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类msg_ptr
的用法示例。
在下文中一共展示了msg_ptr::trans方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vector<Resource*> SourceFacility::removeResource(msg_ptr msg) {
Transaction trans = msg->trans();
double sent_amt = 0;
// pull materials off of the inventory stack until you get the trans amount
// start with an empty manifest
vector<Resource*> toSend;
while (trans.resource->quantity() > (sent_amt+EPS_KG) && !inventory_.empty() ) {
Material* m = inventory_.front();
// if the inventory obj isn't larger than the remaining need, send it as is.
if (m->quantity() <= (trans.resource->quantity() - sent_amt)) {
sent_amt += m->quantity();
toSend.push_back(m);
inventory_.pop_front();
LOG(LEV_DEBUG2) <<"SourceFacility "<< ID()
<<" has decided not to split the object with size : "<< m->quantity();
} else if (m->quantity() > (trans.resource->quantity() - sent_amt)) {
// if the inventory obj is larger than the remaining need, split it.
Material* mat_to_send = m->extract(trans.resource->quantity() - sent_amt);
sent_amt += mat_to_send->quantity();
LOG(LEV_DEBUG2) <<"SourceFacility "<< ID()
<<" has decided to split the object to size : "<< mat_to_send->quantity();
toSend.push_back(mat_to_send);
printSent(mat_to_send);
}
}
return toSend;
}
示例2: trans
FakeConverterMarket() : ConverterMarket() {
string kg = "kg";
string qual = "qual";
gen_rsrc_ptr res = gen_rsrc_ptr(new GenericResource(kg, qual, 1));
Transaction trans(this, OFFER);
msg_ = msg_ptr(new Message(this, this, trans));
msg_->trans().setResource(res);
}
示例3: receiveMessage
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void BatchReactor::receiveMessage(msg_ptr msg) {
// is this a message from on high?
if(msg->trans().supplier()==this){
// file the order
ordersWaiting_.push_front(msg);
LOG(LEV_INFO5, "BReact") << name() << " just received an order.";
}
else {
throw CycException("BatchReactor is not the supplier of this msg.");
}
}
示例4: addResource
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RecipeReactor::addResource(msg_ptr msg, vector<rsrc_ptr> manifest) {
// grab each material object off of the manifest
// and move it into the stocks.
for (vector<rsrc_ptr>::iterator thisMat=manifest.begin();
thisMat != manifest.end();
thisMat++) {
LOG(LEV_DEBUG2, "RReact") <<"RecipeReactor " << ID() << " is receiving material with mass "
<< (*thisMat)->quantity();
stocks_.push_front(make_pair(msg->trans().commod, boost::dynamic_pointer_cast<Material>(*thisMat)));
}
}
示例5: addResource
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ConditioningFacility::addResource(msg_ptr msg, vector<rsrc_ptr> manifest) {
// Put the material received in the stocks
// grab each material object off of the manifest
// and move it into the stocks.
for (vector<rsrc_ptr>::iterator thisMat=manifest.begin();
thisMat != manifest.end();
thisMat++) {
LOG(LEV_DEBUG2, "none!") <<"ConditiondingFacility " << ID() << " is receiving material with mass "
<< (*thisMat)->quantity();
mat_rsrc_ptr mat = boost::dynamic_pointer_cast<Material>(*thisMat);
stocks_.push_front(make_pair(msg->trans().commod, mat));
}
};
示例6: addResource
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void SeparationsMatrixFacility::addResource(msg_ptr msg,
vector<Resource*> manifest) {
LOG(LEV_DEBUG2) << "Entered the addResource file ";
// grab each material object off of the manifest
// and move it into the stocks.
for (vector<Resource*>::iterator thisMat=manifest.begin();
thisMat != manifest.end();
thisMat++) {
LOG(LEV_DEBUG2) <<"SeparationsFacility " << ID() << " is receiving material with mass "
<< (*thisMat)->quantity();
stocks_.push_back(make_pair(msg->trans().commod, dynamic_cast<Material*>(*thisMat)));
}
}
示例7: processOrder
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vector<rsrc_ptr> ConditioningFacility::removeResource(msg_ptr order) {
vector<rsrc_ptr> toRet = vector<rsrc_ptr>() ;
Transaction trans = order->trans();
double order_amount = trans.resource->quantity()*trans.minfrac;
if (remaining_capacity_ >= order_amount){
toRet = processOrder(order);
} else {
string msg;
msg += "The ConditioningFacility has run out of processing capacity. ";
msg += "The order requested by ";
msg += order->requester()->name();
msg += " will not be sent.";
LOG(LEV_DEBUG2, "none!") << msg;
gen_rsrc_ptr empty = gen_rsrc_ptr(new GenericResource("kg","kg",0));
toRet.push_back(empty);
}
return toRet;
}
示例8: while
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vector<rsrc_ptr> RecipeReactor::removeResource(msg_ptr msg) {
Transaction trans = msg->trans();
double newAmt = 0;
mat_rsrc_ptr m;
mat_rsrc_ptr newMat;
mat_rsrc_ptr toAbsorb;
// start with an empty manifest
vector<rsrc_ptr> toSend;
// pull materials off of the inventory stack until you get the trans amount
while (trans.resource->quantity() > newAmt && !inventory_.empty() ) {
for (deque<Fuel>::iterator iter = inventory_.begin();
iter != inventory_.end();
iter ++){
// be sure to get the right commodity
if (iter->first == trans.commod) {
m = iter->second;
// start with an empty material
newMat = mat_rsrc_ptr(new Material());
// if the inventory obj isn't larger than the remaining need, send it as is.
if (m->quantity() <= (trans.resource->quantity() - newAmt)) {
newAmt += m->quantity();
newMat->absorb(m);
inventory_.pop_front();
} else {
// if the inventory obj is larger than the remaining need, split it.
toAbsorb = m->extract(trans.resource->quantity() - newAmt);
newAmt += toAbsorb->quantity();
newMat->absorb(toAbsorb);
}
toSend.push_back(newMat);
LOG(LEV_DEBUG2, "RReact") <<"RecipeReactor "<< ID()
<<" is sending a mat with mass: "<< newMat->quantity();
}
}
}
return toSend;
}
示例9: CycException
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vector<rsrc_ptr> StorageFacility::removeResource(msg_ptr order) {
Transaction trans = order->trans();
// it should be of incommod Commodity type
if(trans.commod != incommod_){
throw CycException("StorageFacility can only send incommodity type materials.");
}
// pull materials off of the inventory_ stack until you get the trans amount
Mass complete = 0;
// start with an empty manifest
vector<rsrc_ptr> toSend;
while(trans.amount > complete && !inventory_.empty() ){
mat_rsrc_ptr m = inventory_.front();
// if the inventory_ obj isn't larger than the remaining need, send it as is.
if(m->quantity() <= (capacity_ - complete)){
complete += m->quantity();
toSend.push_back(m);
LOG(LEV_DEBUG2, "none!") <<"StorageFacility "<< getSN()
<<" is sending a mat with mass: "<< m->quantity();
inventory_.pop_front();
} else {
// if the inventory_ obj is larger than the remaining need, split it.
// start with an empty material
mat_rsrc_ptr newMat = mat_rsrc_ptr(new Material(CompMap(),
m->getUnits(),
m->getName(),
0, ATOMBASED);
mat_rsrc_ptr toAbsorb = m->extractMass(capacity_ - complete);
complete += toAbsorb->quantity();
newMat->absorb(toAbsorb);
toSend.push_back(newMat);
LOG(LEV_DEBUG2, "none!") <<"StorageFacility "<< getSN()
<<" is sending a mat with mass: "<< newMat->quantity();
}
}
return toSend;
}
示例10: while
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
std::vector<Resource*> SeparationsMatrixFacility::removeResource(msg_ptr msg) {
Transaction trans = msg->trans();
double newAmt = 0;
// pull materials off of the inventory stack until you get the trans amount
// start with an empty manifest
vector<Resource*> toSend;
while(trans.resource->quantity() > newAmt && !inventory_.empty() ){
for (deque<InSep>::iterator iter = inventory_.begin();
iter != inventory_.end();
iter ++){
Material* m = inventory_.front().second;
// start with an empty material
Material* newMat = new Material();
// if the inventory obj isn't larger than the remaining need, send it as is.
if(m->quantity() <= (trans.resource->quantity() - newAmt)){
newAmt += m->quantity();
newMat->absorb(m);
inventory_.pop_front();
}
else{
// if the inventory obj is larger than the remaining need, split it.
Material* toAbsorb = m->extract(trans.resource->quantity() - newAmt);
newAmt += toAbsorb->quantity();
newMat->absorb(toAbsorb);
}
toSend.push_back(newMat);
LOG(LEV_DEBUG2) <<"SeparationsMatrixFacility "<< ID()
<<" is sending a mat with mass: "<< newMat->quantity();
}
}
return toSend;
}
示例11: while
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vector<rsrc_ptr> ConditioningFacility::processOrder(msg_ptr order) {
// Send material from inventory to fulfill transactions
Transaction trans = order->trans();
double newAmt = 0;
// pull materials off of the inventory stack until you get the transaction amount
// start with an empty manifest
vector<rsrc_ptr> toSend;
while(trans.resource->quantity() > newAmt && !inventory_.empty() ) {
mat_rsrc_ptr m = inventory_.front().second;
// start with an empty material
mat_rsrc_ptr newMat = mat_rsrc_ptr(new Material());
// if the inventory obj isn't larger than the remaining need, send it as is.
if(m->quantity() <= (trans.resource->quantity() - newAmt)) {
newAmt += m->quantity();
newMat->absorb(m);
inventory_.pop_front();
remaining_capacity_ = remaining_capacity_ - newAmt;
} else {
// if the inventory obj is larger than the remaining need, split it.
mat_rsrc_ptr toAbsorb = m->extract(trans.resource->quantity() - newAmt);
newMat->absorb(toAbsorb);
newAmt += toAbsorb->quantity();
remaining_capacity_ = remaining_capacity_ - newAmt;
}
toSend.push_back(newMat);
LOG(LEV_DEBUG2, "none!") <<"ConditioningFacility "<< ID()
<<" is sending a mat with mass: "<< newMat->quantity();
}
return toSend;
};
示例12: CycException
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
std::vector<Resource*> NullFacility::removeResource(msg_ptr order) {
Transaction trans = order->trans();
// it should be of out_commod_ commodity type
if (trans.commod != out_commod_) {
std::string err_msg = "NullFacility can only send '" + out_commod_ ;
err_msg += + "' materials.";
throw CycException(err_msg);
}
double newAmt = 0;
// pull materials off of the inventory stack until you get the trans amount
// start with an empty manifest
vector<Resource*> toSend;
while (trans.resource->quantity() > newAmt && !inventory_.empty() ) {
Material* m = inventory_.front();
// if the inventory obj isn't larger than the remaining need, send it as is.
if (m->quantity() <= (trans.resource->quantity() - newAmt)) {
newAmt += m->quantity();
inventory_.pop_front();
} else {
// if the inventory obj is larger than the remaining need, split it.
Material* leftover = m->extract(trans.resource->quantity() - newAmt);
newAmt += m->quantity();
inventory_.pop_front();
inventory_.push_back(leftover);
}
toSend.push_back(m);
LOG(LEV_DEBUG2) <<"NullFacility "<< ID()
<<" is sending a mat with mass: "<< m->quantity();
}
return toSend;
}
示例13: toRes
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vector<rsrc_ptr> SourceFacility::removeResource(msg_ptr msg) {
Transaction trans = msg->trans();
return ResourceBuff::toRes(inventory_.popQty(trans.resource->quantity()));
}