Skip to content

Commit

Permalink
Use defaulted move ctor and assign in CallbackBase
Browse files Browse the repository at this point in the history
Move support of CallbackBase is implemented manually due to a limitation
of MSVC2013. Since we've moved to MSVC2015, it's ready to replace it
with defaulted version.

Review-Url: https://codereview.chromium.org/2165913002
Cr-Commit-Position: refs/heads/master@{#406531}
  • Loading branch information
tzik authored and Commit bot committed Jul 20, 2016
1 parent ea728cb commit 9edfd1d
Showing 1 changed file with 8 additions and 18 deletions.
26 changes: 8 additions & 18 deletions base/callback_internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,10 @@ void BindStateBase::Release() {
destructor_(this);
}

CallbackBase<CopyMode::MoveOnly>::CallbackBase(CallbackBase&& c)
: bind_state_(std::move(c.bind_state_)),
polymorphic_invoke_(c.polymorphic_invoke_) {
c.polymorphic_invoke_ = nullptr;
}
CallbackBase<CopyMode::MoveOnly>::CallbackBase(CallbackBase&& c) = default;

CallbackBase<CopyMode::MoveOnly>&
CallbackBase<CopyMode::MoveOnly>::operator=(CallbackBase&& c) {
bind_state_ = std::move(c.bind_state_);
polymorphic_invoke_ = c.polymorphic_invoke_;
c.polymorphic_invoke_ = nullptr;
return *this;
}
CallbackBase<CopyMode::MoveOnly>::operator=(CallbackBase&& c) = default;

void CallbackBase<CopyMode::MoveOnly>::Reset() {
polymorphic_invoke_ = nullptr;
Expand All @@ -41,7 +32,10 @@ void CallbackBase<CopyMode::MoveOnly>::Reset() {

bool CallbackBase<CopyMode::MoveOnly>::EqualsInternal(
const CallbackBase& other) const {
return bind_state_.get() == other.bind_state_.get() &&
// Ignore |polymorphic_invoke_| value in null case.
if (!bind_state_ || !other.bind_state_)
return bind_state_ == other.bind_state_;
return bind_state_ == other.bind_state_ &&
polymorphic_invoke_ == other.polymorphic_invoke_;
}

Expand All @@ -60,8 +54,7 @@ CallbackBase<CopyMode::Copyable>::CallbackBase(
polymorphic_invoke_ = c.polymorphic_invoke_;
}

CallbackBase<CopyMode::Copyable>::CallbackBase(CallbackBase&& c)
: CallbackBase<CopyMode::MoveOnly>(std::move(c)) {}
CallbackBase<CopyMode::Copyable>::CallbackBase(CallbackBase&& c) = default;

CallbackBase<CopyMode::Copyable>&
CallbackBase<CopyMode::Copyable>::operator=(const CallbackBase& c) {
Expand All @@ -71,10 +64,7 @@ CallbackBase<CopyMode::Copyable>::operator=(const CallbackBase& c) {
}

CallbackBase<CopyMode::Copyable>&
CallbackBase<CopyMode::Copyable>::operator=(CallbackBase&& c) {
*static_cast<CallbackBase<CopyMode::MoveOnly>*>(this) = std::move(c);
return *this;
}
CallbackBase<CopyMode::Copyable>::operator=(CallbackBase&& c) = default;

template class CallbackBase<CopyMode::MoveOnly>;
template class CallbackBase<CopyMode::Copyable>;
Expand Down

0 comments on commit 9edfd1d

Please sign in to comment.