| 6057 | }; |
| 6058 | |
| 6059 | class TrackerBase : public ITracker { |
| 6060 | protected: |
| 6061 | enum CycleState { |
| 6062 | NotStarted, |
| 6063 | Executing, |
| 6064 | ExecutingChildren, |
| 6065 | NeedsAnotherRun, |
| 6066 | CompletedSuccessfully, |
| 6067 | Failed |
| 6068 | }; |
| 6069 | class TrackerHasName { |
| 6070 | NameAndLocation m_nameAndLocation; |
| 6071 | public: |
| 6072 | TrackerHasName( NameAndLocation const& nameAndLocation ) : m_nameAndLocation( nameAndLocation ) {} |
| 6073 | bool operator ()( Ptr<ITracker> const& tracker ) { |
| 6074 | return |
| 6075 | tracker->nameAndLocation().name == m_nameAndLocation.name && |
| 6076 | tracker->nameAndLocation().location == m_nameAndLocation.location; |
| 6077 | } |
| 6078 | }; |
| 6079 | typedef std::vector<Ptr<ITracker> > Children; |
| 6080 | NameAndLocation m_nameAndLocation; |
| 6081 | TrackerContext& m_ctx; |
| 6082 | ITracker* m_parent; |
| 6083 | Children m_children; |
| 6084 | CycleState m_runState; |
| 6085 | public: |
| 6086 | TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) |
| 6087 | : m_nameAndLocation( nameAndLocation ), |
| 6088 | m_ctx( ctx ), |
| 6089 | m_parent( parent ), |
| 6090 | m_runState( NotStarted ) |
| 6091 | {} |
| 6092 | virtual ~TrackerBase(); |
| 6093 | |
| 6094 | virtual NameAndLocation const& nameAndLocation() const CATCH_OVERRIDE { |
| 6095 | return m_nameAndLocation; |
| 6096 | } |
| 6097 | virtual bool isComplete() const CATCH_OVERRIDE { |
| 6098 | return m_runState == CompletedSuccessfully || m_runState == Failed; |
| 6099 | } |
| 6100 | virtual bool isSuccessfullyCompleted() const CATCH_OVERRIDE { |
| 6101 | return m_runState == CompletedSuccessfully; |
| 6102 | } |
| 6103 | virtual bool isOpen() const CATCH_OVERRIDE { |
| 6104 | return m_runState != NotStarted && !isComplete(); |
| 6105 | } |
| 6106 | virtual bool hasChildren() const CATCH_OVERRIDE { |
| 6107 | return !m_children.empty(); |
| 6108 | } |
| 6109 | |
| 6110 | virtual void addChild( Ptr<ITracker> const& child ) CATCH_OVERRIDE { |
| 6111 | m_children.push_back( child ); |
| 6112 | } |
| 6113 | |
| 6114 | virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) CATCH_OVERRIDE { |
| 6115 | Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); |
| 6116 | return( it != m_children.end() ) |
nothing calls this directly
no test coverage detected