text: // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  //
  // The following only applies to changes made to this file as part of YugaByte development.
  //
  // Portions Copyright (c) YugaByte, Inc.
  //
  // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
  // in compliance with the License.  You may obtain a copy of the License at
  //
  // http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software distributed under the License
  // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  // or implied.  See the License for the specific language governing permissions and limitations
  // under the License.
  //
  
  #include "yb/gutil/callback_internal.h"
  
  #include <glog/logging.h>
  
  namespace yb {
  namespace internal {
  
  bool CallbackBase::is_null() const {
    return bind_state_.get() == nullptr;
  }
  
  void CallbackBase::Reset() {
    polymorphic_invoke_ = nullptr;
    // NULL the bind_state_ last, since it may be holding the last ref to whatever
    // object owns us, and we may be deleted after that.
    bind_state_ = nullptr;
  }
  
  bool CallbackBase::Equals(const CallbackBase& other) const {
    return bind_state_.get() == other.bind_state_.get() &&
           polymorphic_invoke_ == other.polymorphic_invoke_;
  }
  
  CallbackBase::CallbackBase(BindStateBase* bind_state)
      : bind_state_(bind_state),
        polymorphic_invoke_(nullptr) {
    DCHECK(!bind_state_.get() || bind_state_->HasOneRef());
  }
  
  CallbackBase::~CallbackBase() {
  }
  
  }  // namespace internal
  }  // namespace yb
  