00001 #ifndef SETOFRINGSTACK_INCLUDED
00002 #define SETOFRINGSTACK_INCLUDED
00003
00004 #include <odem.h>
00005
00006 #include "RingStack.h"
00007 #include "Bath.h"
00008 #include "Placement.h"
00009
00010 #include <list>
00011 #include <cassert>
00012
00013
00014 class SetOfRingStack : public Msg {
00015 std::list<RingStack*> stacks;
00016
00017 int maxStacks;
00018 int filledStacks;
00019 int noRings;
00020 double maxDiameterOnStack;
00021 double totalMass;
00022 bool flagForFirst;
00023 bool flagForMixed;
00024
00025 public:
00026 bool empty;
00027
00028 SIMTIME warmingTime;
00029 SIMTIME processingTime;
00030 SIMTIME intialCoolTime;
00031
00032 SIMTIME entryTime;
00033 SIMTIME loadTime;
00034
00035
00036
00037 long vno;
00038
00039
00040 SIMTIME ovenIn,
00041 ovenOut,
00042 waterIn,
00043 waterOut,
00044 polymerIn,
00045 polymerOut;
00046
00047
00048 SIMTIME simArriveDispatcher,
00049 simOvenIn,
00050 simOvenOut,
00051 simWaterIn,
00052 simWaterOut,
00053 simPolymerIn,
00054 simPolymerOut;
00055
00056 SetOfRingStack(long vn=0);
00057
00058 BathType convert(const std::string& str);
00059
00060 bool isFirstOfRequest() {return flagForFirst;};
00061 void setAsFirst() {flagForFirst= true;};
00062 void setAsMixed() {flagForMixed= true;};
00063
00064 bool canAdd(RingStack* r);
00065 void add(RingStack* r);
00066 static int capacity(double diameter);
00067 double oventime() const;
00068
00069 void finished();
00070
00071
00072 Treatment* getTreatment() const {assert(!stacks.empty()); return stacks.front()->getTreatment();}
00073
00074
00075 BathType getBathType() { return getTreatment()->getBath(); }
00076 const std::string& getMaterial() const {assert(!stacks.empty()); return stacks.front()->getMaterial();}
00077 double getMass() const;
00078
00079 bool isCompatibleTo(SetOfRingStack* s) {
00080 return (getTreatment() == s->getTreatment() &&
00081 getMaterial() == s->getMaterial());
00082 }
00083
00084 const std::list<RingStack*>& getStacks() const {return stacks;}
00085 int noOfRings() const;
00086
00087 private:
00088 XY* getPlace(RingStack* r);
00089 };
00090
00091 #endif
00092