| 5533 | }; |
| 5534 | |
| 5535 | class TrackerBase : public ITracker { |
| 5536 | protected: |
| 5537 | enum CycleState { |
| 5538 | NotStarted, |
| 5539 | Executing, |
| 5540 | ExecutingChildren, |
| 5541 | NeedsAnotherRun, |
| 5542 | CompletedSuccessfully, |
| 5543 | Failed |
| 5544 | }; |
| 5545 | class TrackerHasName { |
| 5546 | std::string m_name; |
| 5547 | public: |
| 5548 | TrackerHasName( std::string const& name ) : m_name( name ) {} |
| 5549 | bool operator ()( Ptr<ITracker> const& tracker ) { |
| 5550 | return tracker->name() == m_name; |
| 5551 | } |
| 5552 | }; |
| 5553 | typedef std::vector<Ptr<ITracker> > Children; |
| 5554 | std::string m_name; |
| 5555 | TrackerContext& m_ctx; |
| 5556 | ITracker* m_parent; |
| 5557 | Children m_children; |
| 5558 | CycleState m_runState; |
| 5559 | public: |
| 5560 | TrackerBase( std::string const& name, TrackerContext& ctx, ITracker* parent ) |
| 5561 | : m_name( name ), |
| 5562 | m_ctx( ctx ), |
| 5563 | m_parent( parent ), |
| 5564 | m_runState( NotStarted ) |
| 5565 | {} |
| 5566 | virtual ~TrackerBase(); |
| 5567 | |
| 5568 | virtual std::string name() const CATCH_OVERRIDE { |
| 5569 | return m_name; |
| 5570 | } |
| 5571 | virtual bool isComplete() const CATCH_OVERRIDE { |
| 5572 | return m_runState == CompletedSuccessfully || m_runState == Failed; |
| 5573 | } |
| 5574 | virtual bool isSuccessfullyCompleted() const CATCH_OVERRIDE { |
| 5575 | return m_runState == CompletedSuccessfully; |
| 5576 | } |
| 5577 | virtual bool isOpen() const CATCH_OVERRIDE { |
| 5578 | return m_runState != NotStarted && !isComplete(); |
| 5579 | } |
| 5580 | virtual bool hasChildren() const CATCH_OVERRIDE { |
| 5581 | return !m_children.empty(); |
| 5582 | } |
| 5583 | |
| 5584 | virtual void addChild( Ptr<ITracker> const& child ) CATCH_OVERRIDE { |
| 5585 | m_children.push_back( child ); |
| 5586 | } |
| 5587 | |
| 5588 | virtual ITracker* findChild( std::string const& name ) CATCH_OVERRIDE { |
| 5589 | Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( name ) ); |
| 5590 | return( it != m_children.end() ) |
| 5591 | ? it->get() |
| 5592 | : CATCH_NULL; |
nothing calls this directly
no test coverage detected