// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FBL_REF_COUNTED_H_
#define FBL_REF_COUNTED_H_

#include <zircon/assert.h>

#include <fbl/macros.h>
#include <fbl/ref_counted_internal.h>

namespace fbl {

// Base class for a reference counted type.  Use as
//
// class Handle : public RefCounted<Handle> {
// };
//
// This supports intrusive atomic reference counting with adoption. This means
// that a new object starts life at a reference count of 1 and has to be adopted
// by a type (such as a fbl::RefPtr) that begins manipulation of the reference
// count. If the reference count ever reaches zero, the object's lifetime is
// over and it should be destroyed (Release() returns true if this is the case).
//
// You might be wondering about the unused |T| template parameter. It exists so
// that the base class of the derived object is a unique type. Without being a
// template then you can have many unrelated classes which can be implicitly
// upcasted to RefCounted* which is an undesirable situation for a mixin class
// like this one. Specially because the destructor is not virtual. The same is
// not possible via internal::RefCountedBase since the ctor and dtor are
// protected.
//
template <typename T, bool EnableAdoptionValidator = ZX_DEBUG_ASSERT_IMPLEMENTED>
class RefCounted : private internal::RefCountedBase<EnableAdoptionValidator> {
 public:
  RefCounted() {}
  ~RefCounted() {}

  using internal::RefCountedBase<EnableAdoptionValidator>::AddRef;
  using internal::RefCountedBase<EnableAdoptionValidator>::Release;
  using internal::RefCountedBase<EnableAdoptionValidator>::IsLastReference;
  using internal::RefCountedBase<EnableAdoptionValidator>::Adopt;
  using internal::RefCountedBase<EnableAdoptionValidator>::ref_count_debug;

  // RefCounted<> instances may not be copied, assigned or moved.
  DISALLOW_COPY_ASSIGN_AND_MOVE(RefCounted);
};

}  // namespace fbl

#endif  // FBL_REF_COUNTED_H_
