1/*
2 * Copyright 2009-2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the NewOS License.
4 */
5#ifndef VM_USER_AREA_H
6#define VM_USER_AREA_H
7
8
9#include <util/AVLTree.h>
10
11#include <vm/VMArea.h>
12
13
14struct VMUserAddressSpace;
15
16
17struct VMUserArea : VMArea, AVLTreeNode {
18								VMUserArea(VMAddressSpace* addressSpace,
19									uint32 wiring, uint32 protection);
20								~VMUserArea();
21
22	static	VMUserArea*			Create(VMAddressSpace* addressSpace,
23									const char* name, uint32 wiring,
24									uint32 protection, uint32 allocationFlags);
25	static	VMUserArea*			CreateReserved(VMAddressSpace* addressSpace,
26									uint32 flags, uint32 allocationFlags);
27};
28
29
30struct VMUserAreaTreeDefinition {
31	typedef addr_t					Key;
32	typedef VMUserArea				Value;
33
34	AVLTreeNode* GetAVLTreeNode(Value* value) const
35	{
36		return value;
37	}
38
39	Value* GetValue(AVLTreeNode* node) const
40	{
41		return static_cast<Value*>(node);
42	}
43
44	int Compare(addr_t a, const Value* _b) const
45	{
46		addr_t b = _b->Base();
47		if (a == b)
48			return 0;
49		return a < b ? -1 : 1;
50	}
51
52	int Compare(const Value* a, const Value* b) const
53	{
54		return Compare(a->Base(), b);
55	}
56};
57
58typedef AVLTree<VMUserAreaTreeDefinition> VMUserAreaTree;
59
60
61#endif	// VM_USER_AREA_H
62