| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // SPDX-FileCopyrightText: 2024 yuzu Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #pragma once
- #include <memory>
- #include "common/common_types.h"
- namespace Common {
- template <typename AddressType>
- class RangeSet {
- public:
- RangeSet();
- ~RangeSet();
- RangeSet(RangeSet const&) = delete;
- RangeSet& operator=(RangeSet const&) = delete;
- RangeSet(RangeSet&& other);
- RangeSet& operator=(RangeSet&& other);
- void Add(AddressType base_address, size_t size);
- void Subtract(AddressType base_address, size_t size);
- void Clear();
- bool Empty() const;
- template <typename Func>
- void ForEach(Func&& func) const;
- template <typename Func>
- void ForEachInRange(AddressType device_addr, size_t size, Func&& func) const;
- private:
- struct RangeSetImpl;
- std::unique_ptr<RangeSetImpl> m_impl;
- };
- template <typename AddressType>
- class OverlapRangeSet {
- public:
- OverlapRangeSet();
- ~OverlapRangeSet();
- OverlapRangeSet(OverlapRangeSet const&) = delete;
- OverlapRangeSet& operator=(OverlapRangeSet const&) = delete;
- OverlapRangeSet(OverlapRangeSet&& other);
- OverlapRangeSet& operator=(OverlapRangeSet&& other);
- void Add(AddressType base_address, size_t size);
- void Subtract(AddressType base_address, size_t size);
- template <typename Func>
- void Subtract(AddressType base_address, size_t size, Func&& on_delete);
- void DeleteAll(AddressType base_address, size_t size);
- void Clear();
- bool Empty() const;
- template <typename Func>
- void ForEach(Func&& func) const;
- template <typename Func>
- void ForEachInRange(AddressType device_addr, size_t size, Func&& func) const;
- private:
- struct OverlapRangeSetImpl;
- std::unique_ptr<OverlapRangeSetImpl> m_impl;
- };
- } // namespace Common
|