Diana  0.8.3
IDianaPetriNet.hpp
00001 #ifndef IDIANA_PETRINET_H
00002 #define IDIANA_PETRINET_H
00003 
00004 
00005 #include <CapeOpen.hpp>
00006 
00007 namespace Diana {
00008         class IDianaNumericDAESolver;
00009         
00013         class IDianaPetriNet {
00014         public:
00018           virtual Common::Collection::ICapeCollection* GetPlaces()=0;
00022           virtual Common::Collection::ICapeCollection* GetTransitions()=0;
00029             virtual Common::Types::CapeBoolean Switch(const Common::Types::CapeArrayLong& indices)=0;
00030 
00037             virtual Common::Types::CapeBoolean shouldFork()=0;
00042             virtual void afterFork(const Common::Types::CapeArrayLong& phiIndices,Common::Types::CapeBoolean isDaughter)=0;
00043 
00047             virtual Common::Types::CapeArrayBoolean getState()=0;
00048 
00052             virtual void setState(const Common::Types::CapeArrayBoolean& state)=0;
00053 
00057             virtual Common::Types::CapeLong getForkIndex() = 0;
00058 
00062             virtual Common::Types::CapeDouble GetNextExplicitTime() const  = 0;
00063 
00067             virtual const CapeArrayDouble& GetStoredPhi() const = 0;
00068 
00072             virtual void SetStoredPhi(const CapeArrayDouble& phi) = 0;
00073 
00074 
00075         };
00076 
00080     class IDianaPetriPlace : public virtual Common::Parameter::ICapeParameter {
00081         public:
00085       virtual Common::Types::CapeBoolean GetMark() = 0;
00089       virtual void SetMark(Common::Types::CapeBoolean mark) 
00090           throw (ECapeUnknown, ECapeInvalidArgument) = 0;
00094         void SetValue(const Common::Types::CapeVariant& _value)
00095             throw (ECapeUnknown, ECapeInvalidArgument) = 0;
00096 
00097         };
00098         
00102         class IDianaPetriTransition :  public virtual Common::Parameter::ICapeParameter {
00103         public:
00107                 virtual Common::Types::CapeDouble GetPhiValue() const throw (Common::Error::ECapeUnknown) = 0;
00108         };
00109 }
00110 
00111 #ifndef SWIG
00112 
00113     std::ostream& operator<<(std::ostream& out_file, const Diana::IDianaPetriPlace& place);
00114 #endif
00115 
00116 #endif //IDIANA_PETRINET_H