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 <vm/VMArea.h>
10
11
12struct VMUserAddressSpace;
13
14
15struct VMUserArea : VMArea {
16								VMUserArea(VMAddressSpace* addressSpace,
17									uint32 wiring, uint32 protection);
18								~VMUserArea();
19
20	static	VMUserArea*			Create(VMAddressSpace* addressSpace,
21									const char* name, uint32 wiring,
22									uint32 protection, uint32 allocationFlags);
23	static	VMUserArea*			CreateReserved(VMAddressSpace* addressSpace,
24									uint32 flags, uint32 allocationFlags);
25
26			DoublyLinkedListLink<VMUserArea>& AddressSpaceLink()
27									{ return fAddressSpaceLink; }
28			const DoublyLinkedListLink<VMUserArea>& AddressSpaceLink() const
29									{ return fAddressSpaceLink; }
30
31private:
32			DoublyLinkedListLink<VMUserArea> fAddressSpaceLink;
33};
34
35
36struct VMUserAreaGetLink {
37    inline DoublyLinkedListLink<VMUserArea>* operator()(
38		VMUserArea* area) const
39    {
40        return &area->AddressSpaceLink();
41    }
42
43    inline const DoublyLinkedListLink<VMUserArea>* operator()(
44		const VMUserArea* area) const
45    {
46        return &area->AddressSpaceLink();
47    }
48};
49
50typedef DoublyLinkedList<VMUserArea, VMUserAreaGetLink> VMUserAreaList;
51
52
53#endif	// VM_USER_AREA_H
54