Changeset View
Changeset View
Standalone View
Standalone View
src/interfaces/chain.cpp
Show All 23 Lines | namespace { | ||||
class ChainImpl : public Chain { | class ChainImpl : public Chain { | ||||
public: | public: | ||||
std::unique_ptr<Chain::Lock> lock(bool try_lock) override { | std::unique_ptr<Chain::Lock> lock(bool try_lock) override { | ||||
auto result = std::make_unique<LockingStateImpl>( | auto result = std::make_unique<LockingStateImpl>( | ||||
::cs_main, "cs_main", __FILE__, __LINE__, try_lock); | ::cs_main, "cs_main", __FILE__, __LINE__, try_lock); | ||||
if (try_lock && result && !*result) { | if (try_lock && result && !*result) { | ||||
return {}; | return {}; | ||||
} | } | ||||
// std::move necessary on some compilers due to conversion from | return result; | ||||
// LockingStateImpl to Lock pointer | |||||
return std::move(result); | |||||
} | } | ||||
std::unique_ptr<Chain::Lock> assumeLocked() override { | std::unique_ptr<Chain::Lock> assumeLocked() override { | ||||
return std::make_unique<LockImpl>(); | return std::make_unique<LockImpl>(); | ||||
} | } | ||||
}; | }; | ||||
} // namespace | } // namespace | ||||
std::unique_ptr<Chain> MakeChain() { | std::unique_ptr<Chain> MakeChain() { | ||||
return std::make_unique<ChainImpl>(); | return std::make_unique<ChainImpl>(); | ||||
} | } | ||||
} // namespace interfaces | } // namespace interfaces |