OperationItemSupplier::OperationItemSupplier( ItemSupplier* i, Buffer *b ) : supitem(i) { if (!i || !b || !i->getSupplier()) throw LogicException( "An OperationItemSupplier always needs to point to " "a itemsupplier and a buffer" ); stringstream o; o << "Purchase " << b->getName() << " from " << i->getSupplier()->getName(); setName(o.str()); setDuration(i->getLeadTime()); setSizeMultiple(i->getSizeMultiple()); setSizeMinimum(i->getSizeMinimum()); setLocation(b->getLocation()); setSource(i->getSource()); setCost(i->getCost()); setFence(i->getFence()); setHidden(true); new FlowEnd(this, b, 1); initType(metadata); // Optionally, create a load if (i->getResource()) new LoadDefault(this, i->getResource(), i->getResourceQuantity()); // Insert in the list of ItemSupplier operations. // The list is not sorted (for performance reasons). nextOperation = i->firstOperation; i->firstOperation = this; }
OperationItemDistribution::OperationItemDistribution( ItemDistribution* i, Buffer *src, Buffer* dest ) : itemdist(i) { if (!i || !src || !dest) throw LogicException( "An OperationItemDistribution always needs to point to " "a ItemDistribution, a source buffer and a destination buffer" ); stringstream o; o << "Ship " << dest->getItem()->getName() << " from " << src->getName() << " to " << dest->getName(); setName(o.str()); setDuration(i->getLeadTime()); setSizeMultiple(i->getSizeMultiple()); setSizeMinimum(i->getSizeMinimum()); setLocation(dest->getLocation()); setSource(i->getSource()); setCost(i->getCost()); setFence(i->getFence()); setHidden(true); new FlowEnd(this, dest, 1); new FlowStart(this, src, -1); initType(metadata); // Optionally, create a load if (i->getResource()) new LoadDefault(this, i->getResource(), i->getResourceQuantity()); // Insert in the list of ItemDistribution operations. // The list is not sorted (for performance reasons). nextOperation = i->firstOperation; i->firstOperation = this; }
DECLARE_EXPORT OperationItemSupplier::OperationItemSupplier( ItemSupplier* i, Buffer *b ) : supitem(i) { if (!i || !b || !i->getSupplier()) throw LogicException( "An OperationItemSupplier always needs to point to " "a itemsupplier and a buffer" ); stringstream o; o << "Purchase " << b->getName() << " from " << i->getSupplier()->getName(); setName(o.str()); setDuration(i->getLeadTime()); setSizeMultiple(i->getSizeMultiple()); setSizeMinimum(i->getSizeMinimum()); setLocation(b->getLocation()); setSource(i->getSource()); setCost(i->getCost()); setFence(i->getFence()); setHidden(true); new FlowEnd(this, b, 1); initType(metadata); // Optionally, create a load if (i->getResource()) new LoadDefault(this, i->getResource(), i->getResourceQuantity()); // Insert in the list of ItemSupplier operations. // We keep the list sorted by the operation name. if (!i->firstOperation || getName() < i->firstOperation->getName()) { // New head of the list nextOperation = i->firstOperation; i->firstOperation = this; } else { // Insert in the middle or at the tail OperationItemSupplier* o = i->firstOperation; while (o->nextOperation) { if (b->getName() < o->nextOperation->getName()) break; o = o->nextOperation; } nextOperation = o->nextOperation; o->nextOperation = this; } }
DECLARE_EXPORT OperationItemDistribution::OperationItemDistribution( ItemDistribution* i, Buffer *src, Buffer* dest ) : itemdist(i) { if (!i || !src || !dest) throw LogicException( "An OperationItemDistribution always needs to point to " "a ItemDistribution, a source buffer and a destination buffer" ); stringstream o; o << "Ship " << dest->getItem()->getName() << " from " << src->getName() << " to " << dest->getName(); setName(o.str()); setDuration(i->getLeadTime()); setSizeMultiple(i->getSizeMultiple()); setSizeMinimum(i->getSizeMinimum()); setLocation(dest->getLocation()); setSource(i->getSource()); setCost(i->getCost()); setHidden(true); new FlowEnd(this, dest, 1); new FlowStart(this, src, -1); initType(metadata); // Insert in the list of ItemDistribution operations. // We keep the list sorted by the operation name. if (!i->firstOperation || getName() < i->firstOperation->getName()) { // New head of the list nextOperation = i->firstOperation; i->firstOperation = this; } else { // Insert in the middle or at the tail OperationItemDistribution* o = i->firstOperation; while (o->nextOperation) { if (getName() < o->nextOperation->getName()) break; o = o->nextOperation; } nextOperation = o->nextOperation; o->nextOperation = this; } }