Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit baa0467

Browse files
committed
Use raw references instead of shared_ptr in waiting strategies
1 parent 273580b commit baa0467

17 files changed

+63
-65
lines changed

Disruptor.Tests/TimeoutBlockingWaitStrategyTests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ BOOST_AUTO_TEST_CASE(ShouldTimeoutWaitFor)
1919
auto theTimeout = std::chrono::milliseconds(500);
2020
auto waitStrategy = std::make_shared< TimeoutBlockingWaitStrategy >(theTimeout);
2121
auto cursor = std::make_shared< Sequence >(5);
22-
auto dependent = cursor;
22+
const auto& dependent = cursor;
2323

2424
EXPECT_CALL(*sequenceBarrierMock, checkAlert()).Times(testing::AtLeast(1));
2525

2626
auto t0 = ClockConfig::Clock::now();
2727

2828
try
2929
{
30-
waitStrategy->waitFor(6, cursor, dependent, sequenceBarrierMock);
30+
waitStrategy->waitFor(6, *cursor, *dependent, *sequenceBarrierMock);
3131
throw std::runtime_error("TimeoutException should have been thrown");
3232
}
3333
catch (TimeoutException&)

Disruptor.Tests/WaitStrategyMock.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@ namespace Tests
1616
class WaitStrategyMock : public IWaitStrategy
1717
{
1818
public:
19-
MOCK_METHOD4(waitFor, std::int64_t(std::int64_t sequence,
20-
const std::shared_ptr< Sequence >& cursor,
21-
const std::shared_ptr< ISequence >& dependentSequence,
22-
const std::shared_ptr< ISequenceBarrier >& barrier));
19+
MOCK_METHOD4(waitFor, std::int64_t(std::int64_t sequence, Sequence& cursor, ISequence& dependentSequence, ISequenceBarrier& barrier));
2320

2421
MOCK_METHOD0(signalAllWhenBlocking, void());
2522

Disruptor.Tests/WaitStrategyTestUtil.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ namespace Tests
1919
std::thread([=] { sequencerUpdater->run(); }).detach();
2020
sequencerUpdater->waitForStartup();
2121
auto cursor = std::make_shared< Sequence >(0);
22-
auto sequence = waitStrategy->waitFor(0, cursor, sequencerUpdater->sequence, std::make_shared< DummySequenceBarrier >());
22+
auto barrier = std::make_shared< DummySequenceBarrier >();
23+
auto sequence = waitStrategy->waitFor(0, *cursor, *sequencerUpdater->sequence, *barrier);
2324

2425
BOOST_CHECK_EQUAL(sequence, 0L);
2526
}

Disruptor/BlockingWaitStrategy.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,26 @@ namespace Disruptor
1111
{
1212

1313
std::int64_t BlockingWaitStrategy::waitFor(std::int64_t sequence,
14-
const std::shared_ptr< Sequence >& cursor,
15-
const std::shared_ptr< ISequence >& dependentSequence,
16-
const std::shared_ptr< ISequenceBarrier >& barrier)
14+
Sequence& cursor,
15+
ISequence& dependentSequence,
16+
ISequenceBarrier& barrier)
1717
{
18-
if (cursor->value() < sequence)
18+
if (cursor.value() < sequence)
1919
{
2020
boost::unique_lock< decltype(m_gate) > uniqueLock(m_gate);
2121

22-
while (cursor->value() < sequence)
22+
while (cursor.value() < sequence)
2323
{
24-
barrier->checkAlert();
24+
barrier.checkAlert();
2525

2626
m_conditionVariable.wait(uniqueLock);
2727
}
2828
}
2929

3030
std::int64_t availableSequence;
31-
while ((availableSequence = dependentSequence->value()) < sequence)
31+
while ((availableSequence = dependentSequence.value()) < sequence)
3232
{
33-
barrier->checkAlert();
33+
barrier.checkAlert();
3434
}
3535

3636
return availableSequence;

Disruptor/BlockingWaitStrategy.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ namespace Disruptor
1919
* \see IWaitStrategy::waitFor
2020
*/
2121
std::int64_t waitFor(std::int64_t sequence,
22-
const std::shared_ptr< Sequence >& cursor,
23-
const std::shared_ptr< ISequence >& dependentSequence,
24-
const std::shared_ptr< ISequenceBarrier >& barrier) override;
22+
Sequence& cursor,
23+
ISequence& dependentSequence,
24+
ISequenceBarrier& barrier) override;
2525

2626
/**
2727
* \see IWaitStrategy::signalAllWhenBlocking

Disruptor/BusySpinWaitStrategy.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ namespace Disruptor
1111
{
1212

1313
std::int64_t BusySpinWaitStrategy::waitFor(std::int64_t sequence,
14-
const std::shared_ptr< Sequence >& /*cursor*/,
15-
const std::shared_ptr< ISequence >& dependentSequence,
16-
const std::shared_ptr< ISequenceBarrier >& barrier)
14+
Sequence& /*cursor*/,
15+
ISequence& dependentSequence,
16+
ISequenceBarrier& barrier)
1717
{
1818
std::int64_t availableSequence;
1919

20-
while ((availableSequence = dependentSequence->value()) < sequence)
20+
while ((availableSequence = dependentSequence.value()) < sequence)
2121
{
22-
barrier->checkAlert();
22+
barrier.checkAlert();
2323
}
2424

2525
return availableSequence;

Disruptor/BusySpinWaitStrategy.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ namespace Disruptor
1919
* \see IWaitStrategy::waitFor
2020
*/
2121
std::int64_t waitFor(std::int64_t sequence,
22-
const std::shared_ptr< Sequence >& cursor,
23-
const std::shared_ptr< ISequence >& dependentSequence,
24-
const std::shared_ptr< ISequenceBarrier >& barrier) override;
22+
Sequence& cursor,
23+
ISequence& dependentSequence,
24+
ISequenceBarrier& barrier) override;
2525

2626
/**
2727
* \see IWaitStrategy::signalAllWhenBlocking

Disruptor/IWaitStrategy.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ namespace Disruptor
3030
* \returns the sequence that is available which may be greater than the requested sequence.
3131
*/
3232
virtual std::int64_t waitFor(std::int64_t sequence,
33-
const std::shared_ptr< Sequence >& cursor,
34-
const std::shared_ptr< ISequence >& dependentSequence,
35-
const std::shared_ptr< ISequenceBarrier >& barrier) = 0;
33+
Sequence& cursor,
34+
ISequence& dependentSequence,
35+
ISequenceBarrier& barrier) = 0;
3636

3737
/**
3838
* Signal those IEventProcessor waiting that the cursor has advanced.

Disruptor/ProcessingSequenceBarrier.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace Disruptor
3131
{
3232
checkAlert();
3333

34-
auto availableSequence = m_waitStrategyRef.waitFor(sequence, m_cursorSequence, m_dependentSequence, shared_from_this());
34+
auto availableSequence = m_waitStrategyRef.waitFor(sequence, *m_cursorSequence, *m_dependentSequence, *shared_from_this());
3535

3636
if (availableSequence < sequence)
3737
return availableSequence;

Disruptor/SleepingWaitStrategy.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ namespace Disruptor
1616
}
1717

1818
std::int64_t SleepingWaitStrategy::waitFor(std::int64_t sequence,
19-
const std::shared_ptr< Sequence >& /*cursor*/,
20-
const std::shared_ptr< ISequence >& dependentSequence,
21-
const std::shared_ptr< ISequenceBarrier >& barrier)
19+
Sequence& /*cursor*/,
20+
ISequence& dependentSequence,
21+
ISequenceBarrier& barrier)
2222
{
2323
std::int64_t availableSequence;
2424
auto counter = m_retries;
2525

26-
while ((availableSequence = dependentSequence->value()) < sequence)
26+
while ((availableSequence = dependentSequence.value()) < sequence)
2727
{
28-
counter = applyWaitMethod(*barrier, counter);
28+
counter = applyWaitMethod(barrier, counter);
2929
}
3030

3131
return availableSequence;

0 commit comments

Comments
 (0)