RangeAllocator.h 847 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include "Range.h"
  8. #include <AK/Vector.h>
  9. namespace UserspaceEmulator {
  10. class RangeAllocator {
  11. public:
  12. RangeAllocator();
  13. void initialize_with_range(VirtualAddress, size_t);
  14. Optional<Range> allocate_anywhere(size_t, size_t alignment = PAGE_SIZE);
  15. Optional<Range> allocate_specific(VirtualAddress, size_t);
  16. Optional<Range> allocate_randomized(size_t, size_t alignment);
  17. void deallocate(const Range&);
  18. void reserve_user_range(VirtualAddress, size_t);
  19. void dump() const;
  20. bool contains(const Range& range) const { return m_total_range.contains(range); }
  21. private:
  22. void carve_at_index(int, const Range&);
  23. Vector<Range> m_available_ranges;
  24. Range m_total_range;
  25. };
  26. }