Serenity Operating System
1/*
2 * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include "Range.h"
8#include <AK/Vector.h>
9
10namespace UserspaceEmulator {
11
12Vector<Range, 2> Range::carve(Range const& taken) const
13{
14 VERIFY((taken.size() % PAGE_SIZE) == 0);
15 Vector<Range, 2> parts;
16 if (taken == *this)
17 return {};
18 if (taken.base() > base())
19 parts.append({ base(), taken.base().get() - base().get() });
20 if (taken.end() < end())
21 parts.append({ taken.end(), end().get() - taken.end().get() });
22 return parts;
23}
24
25}