// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/allocator/dispatcher/internal/dispatch_data.h"
#include "base/allocator/partition_allocator/partition_alloc_buildflags.h"

namespace base::allocator::dispatcher::internal {

#if BUILDFLAG(USE_PARTITION_ALLOC)

DispatchData& DispatchData::SetAllocationObserverHooks(
    AllocationObserverHook* allocation_observer_hook,
    FreeObserverHook* free_observer_hook) {
  allocation_observer_hook_ = allocation_observer_hook;
  free_observer_hook_ = free_observer_hook;

  return *this;
}

DispatchData::AllocationObserverHook* DispatchData::GetAllocationObserverHook()
    const {
  return allocation_observer_hook_;
}

DispatchData::FreeObserverHook* DispatchData::GetFreeObserverHook() const {
  return free_observer_hook_;
}
#endif

#if BUILDFLAG(USE_ALLOCATOR_SHIM)
DispatchData& DispatchData::SetAllocatorDispatch(
    AllocatorDispatch* allocator_dispatch) {
  allocator_dispatch_ = allocator_dispatch;
  return *this;
}

AllocatorDispatch* DispatchData::GetAllocatorDispatch() const {
  return allocator_dispatch_;
}
#endif
}  // namespace base::allocator::dispatcher::internal
