1/*
2 * Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de>
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef VOLUME_H
6#define VOLUME_H
7
8
9#include <fs_interface.h>
10
11
12class Node;
13struct vnode;
14
15
16class Volume {
17public:
18								Volume(fs_volume* fsVolume);
19								~Volume();
20
21			fs_volume*			FSVolume() const	{ return fFSVolume; }
22			dev_t				ID() const			{ return fFSVolume->id; }
23
24			fs_volume*			SourceFSVolume() const
25													{ return fSourceFSVolume; }
26
27			Node*				RootNode() const 	{ return fRootNode; }
28			const char*			Name() const 		{ return fName; }
29
30			status_t			Mount(const char* parameterString);
31			void				Unmount();
32
33			const fs_vnode_ops*	VnodeOps() const	{ return &fVnodeOps; }
34
35private:
36			struct VolumeListener;
37	friend	struct VolumeListener;
38
39private:
40			status_t			_InitVnodeOpsFrom(fs_vnode* sourceNode);
41
42private:
43			fs_volume*			fFSVolume;
44			fs_volume*			fSourceFSVolume;
45			vnode*				fSourceVnode;
46			Node*				fRootNode;
47
48			fs_vnode_ops		fVnodeOps;
49
50			char				fName[B_PATH_NAME_LENGTH];
51};
52
53
54#endif	// VOLUME_H
55