AndroMeta  2.0.0
AndroMeta/include/AndroMeta/MProc.h
Go to the documentation of this file.
00001 /*
00002  * Copyright 2009-2012 AndroMeta LLC. All rights reserved.
00003  *
00004  * AndroMeta LLC retains all intellectual property and proprietary 
00005  * rights to this software and related documentation and any modifications 
00006  * thereto.  Any use, reproduction, disclosure, or distribution of this 
00007  * software and related documentation without an express license agreement 
00008  * from AndroMeta LLC is strictly prohibited.
00009  * 
00010  */
00011 
00019 #ifndef ANDROMETA_M_PROC_H
00020 #define ANDROMETA_M_PROC_H
00021 
00022 #include <AndroMeta/MTime.h>
00023 
00024 namespace Meta{
00025   
00026   class MProcTask;
00027   
00044   class MProc{
00045   public:
00046     
00047     typedef MMap<int, mvar> SignalMap;
00048     typedef MVector<int> IdVec;
00049     
00053     MProc();
00054     
00058     virtual ~MProc();
00059     
00078     void queue(MProcTask* task,
00079                MProc::SignalMap* signalMap=0,
00080                double priority=0,
00081                bool activate=false,
00082                const mtime* time=0);
00083     
00091     virtual bool activate(SignalMap& signalMap);
00092     
00097     virtual mvar run(SignalMap& signalMap);
00098     
00102     void run(SignalMap* signalMap);
00103     
00112     virtual int connect(MProc* mp, const mvar& data=undef);
00113     
00121     virtual void connect(int outId,
00122                          int inId,
00123                          MProc* mp,
00124                          const mvar& data=undef);
00125     
00131     virtual void disconnect(int outId);
00132     
00136     virtual void disconnect();
00137     
00141     virtual void detach();
00142     
00146     virtual void signal(int outId);
00147     
00151     virtual void signal(int outId, const mvar& v);
00152     
00162     virtual void signal(int outId,
00163                         const mvar& v,
00164                         double priority,
00165                         bool persist=true,
00166                         const mtime* time=0);
00167     
00171     virtual void signalAll();
00172     
00176     virtual void signalAll(const mvar& v);
00177     
00181     virtual void signalAll(const mvar& v,
00182                            double priority,
00183                            bool persist=true,
00184                            const mtime* time=0);
00185     
00189     const IdVec& outEdges() const;
00190     
00194     const IdVec& inEdges() const;
00195     
00199     bool isThreaded() const;
00200     
00205     void setThreaded(bool flag);
00206     
00216     bool terminate(bool block=true);
00217     
00224     bool hasTerminated() const;
00225     
00230     void reset();
00231     
00235     MProc* outEdge(int outId);
00236     
00240     MProc* inEdge(int inId);
00241     
00245     const MProc* outEdge(int outId) const;
00246     
00250     const MProc* inEdge(int inId) const;
00251     
00256     int inId(int outId) const;
00257  
00262     int outId(int inId) const;
00263     
00267     const mvar& edgeData(int outId) const;
00268     
00272     void setEdgeData(int outId, const mvar& v);
00273     
00274   private:
00275     MProc& operator=(const MProc&);
00276     MProc(const MProc&);
00277     
00278     class MProc_* x_;
00279   };
00280   
00281 } // end namespace Meta
00282 
00283 #endif // ANDROMETA_M_PROC_H