MCPcopy Create free account
hub / github.com/Profactor/cv-plot / GeneratorTracker

Class GeneratorTracker

CvPlot/ext/catch2/inc/catch.hpp:12427–12477  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12425
12426 namespace Generators {
12427 struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorTracker {
12428 GeneratorBasePtr m_generator;
12429
12430 GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
12431 : TrackerBase( nameAndLocation, ctx, parent )
12432 {}
12433 ~GeneratorTracker();
12434
12435 static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTracking::NameAndLocation const& nameAndLocation ) {
12436 std::shared_ptr<GeneratorTracker> tracker;
12437
12438 ITracker& currentTracker = ctx.currentTracker();
12439 if( TestCaseTracking::ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
12440 assert( childTracker );
12441 assert( childTracker->isGeneratorTracker() );
12442 tracker = std::static_pointer_cast<GeneratorTracker>( childTracker );
12443 }
12444 else {
12445 tracker = std::make_shared<GeneratorTracker>( nameAndLocation, ctx, &currentTracker );
12446 currentTracker.addChild( tracker );
12447 }
12448
12449 if( !ctx.completedCycle() && !tracker->isComplete() ) {
12450 tracker->open();
12451 }
12452
12453 return *tracker;
12454 }
12455
12456 // TrackerBase interface
12457 bool isGeneratorTracker() const override { return true; }
12458 auto hasGenerator() const -> bool override {
12459 return !!m_generator;
12460 }
12461 void close() override {
12462 TrackerBase::close();
12463 // Generator interface only finds out if it has another item on atual move
12464 if (m_runState == CompletedSuccessfully && m_generator->next()) {
12465 m_children.clear();
12466 m_runState = Executing;
12467 }
12468 }
12469
12470 // IGeneratorTracker interface
12471 auto getGenerator() const -> GeneratorBasePtr const& override {
12472 return m_generator;
12473 }
12474 void setGenerator( GeneratorBasePtr&& generator ) override {
12475 m_generator = std::move( generator );
12476 }
12477 };
12478 GeneratorTracker::~GeneratorTracker() {}
12479 }
12480

Callers

nothing calls this directly

Calls 6

findChildMethod · 0.80
addChildMethod · 0.80
completedCycleMethod · 0.80
isCompleteMethod · 0.80
isGeneratorTrackerMethod · 0.45
openMethod · 0.45

Tested by

no test coverage detected