// 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/task/sequence_manager/hierarchical_timing_wheel.h" namespace base::sequence_manager { //////////////////////////////////////////////////////////////////////////////// // HierarchicalTimingWheelHandle HierarchicalTimingWheelHandle::HierarchicalTimingWheelHandle() = default; HierarchicalTimingWheelHandle::HierarchicalTimingWheelHandle( HierarchicalTimingWheelHandle&& other) noexcept : timing_wheel_handle_(std::move(other.timing_wheel_handle_)), heap_handle_(std::move(other.heap_handle_)), hierarchy_index_(std::exchange(other.hierarchy_index_, kInvalidIndex)) {} HierarchicalTimingWheelHandle& HierarchicalTimingWheelHandle::operator=( HierarchicalTimingWheelHandle&& other) noexcept { timing_wheel_handle_ = std::move(other.timing_wheel_handle_); heap_handle_ = std::move(other.heap_handle_); hierarchy_index_ = std::exchange(other.hierarchy_index_, kInvalidIndex); return *this; } HierarchicalTimingWheelHandle::~HierarchicalTimingWheelHandle() = default; internal::TimingWheelHandle HierarchicalTimingWheelHandle::GetTimingWheelHandle() const { return timing_wheel_handle_; } void HierarchicalTimingWheelHandle::SetTimingWheelHandle( internal::TimingWheelHandle timing_wheel_handle) { DCHECK(timing_wheel_handle.IsValid()); DCHECK(!heap_handle_.IsValid()); timing_wheel_handle_ = timing_wheel_handle; } void HierarchicalTimingWheelHandle::ClearTimingWheelHandle() { timing_wheel_handle_.Reset(); } HeapHandle HierarchicalTimingWheelHandle::GetHeapHandle() { return heap_handle_; } void HierarchicalTimingWheelHandle::SetHeapHandle(HeapHandle heap_handle) { DCHECK(heap_handle.IsValid()); DCHECK(!timing_wheel_handle_.IsValid()); heap_handle_ = heap_handle; } void HierarchicalTimingWheelHandle::ClearHeapHandle() { heap_handle_.reset(); } size_t HierarchicalTimingWheelHandle::GetHierarchyIndex() const { return hierarchy_index_; } void HierarchicalTimingWheelHandle::SetHierarchyIndex(size_t hierarchy_index) { DCHECK(hierarchy_index != kInvalidIndex); hierarchy_index_ = hierarchy_index; } void HierarchicalTimingWheelHandle::ClearHierarchyIndex() { hierarchy_index_ = kInvalidIndex; } // static HierarchicalTimingWheelHandle HierarchicalTimingWheelHandle::Invalid() { return HierarchicalTimingWheelHandle(); } bool HierarchicalTimingWheelHandle::IsValid() const { return (timing_wheel_handle_.IsValid() || heap_handle_.IsValid()) && hierarchy_index_ != kInvalidIndex; } } // namespace base::sequence_manager