00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef FSF_PULSE_H
00030 #define FSF_PULSE_H
00031
00032 #include "FsfNode.h"
00033
00034 namespace fsf{
00035
00040 class CPulse : public CNode {
00041 public:
00042
00044
00045
00047 CPulse()
00048 : CNode() {}
00050 CPulse(const std::string &strName, Time tTime=0)
00051 : CNode(strName,NULL,tTime) {}
00053 CPulse(const CPulse& rhs)
00054 : CNode(rhs) {}
00055
00056
00058 CPulse& operator=(const CPulse& rhs);
00059
00061 virtual CNode *clone() { return new CPulse(*this); }
00062
00064
00066 virtual void getTypeID(std::string &str) { str.assign("FSF_PULSE"); }
00067
00070 virtual CPulse *getPulse() { return this; }
00071 };
00072
00075 class CPassivePulse : public CPulse {
00076 public:
00077
00079
00080
00082 CPassivePulse()
00083 : CPulse() {}
00085 CPassivePulse(const std::string &strName, Time tTime=0)
00086 : CPulse(strName,tTime) {}
00088 CPassivePulse(const CPassivePulse& rhs)
00089 : CPulse(rhs) {}
00090
00091
00093 CPassivePulse& operator=(const CPassivePulse& rhs);
00094
00096 virtual CNode *clone() { return new CPassivePulse(*this); }
00097
00099
00101
00102
00104 virtual void getTypeID(std::string &str) { str.assign("FSF_PASSIVE_PULSE"); }
00105
00107
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00120 void detachComponents(std::list<CNode*> &listComponents) {
00121 listComponents.assign(getListComponents().begin(),getListComponents().end());
00122 getListComponents().erase(getListComponents().begin(),getListComponents().end());
00123 }
00124
00126 void cleanUpComponents();
00127 };
00128
00131 class CActivePulse : public CPulse {
00132 protected:
00133 CMutex m_csNbPaths;
00134 int m_nNbPaths;
00135 public:
00136
00137
00139
00140
00142 CActivePulse()
00143 : CPulse(), m_nNbPaths(1) {}
00145 CActivePulse(const std::string &strName, Time tTime=0)
00146 : CPulse(strName,tTime), m_nNbPaths(1) {}
00148 CActivePulse(const CActivePulse& rhs)
00149 : CPulse(rhs), m_nNbPaths(1) {}
00150
00151
00153 CActivePulse& operator=(const CActivePulse& rhs);
00154
00156 virtual CNode *clone() { return new CActivePulse(*this); }
00157
00159
00160
00162
00163
00165 virtual void getTypeID(std::string &str) { str.assign("FSF_ACTIVE_PULSE"); }
00167 int getNbPaths() { m_csNbPaths.lock(); int r=m_nNbPaths; m_csNbPaths.unlock(); return r;}
00169
00171
00172
00173 int incNbPaths(int nNbPaths=1) { m_csNbPaths.lock(); int r=(m_nNbPaths+=nNbPaths); m_csNbPaths.unlock(); return r;}
00175 int decNbPaths() { m_csNbPaths.lock(); int r=(--m_nNbPaths); m_csNbPaths.unlock(); return r; }
00176
00178
00179 };
00180
00181 }
00182
00183 #endif // FSF_PULSE_H
00184