1/*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef USERLAND_FS_HAIKU_KERNEL_NODE_H
6#define USERLAND_FS_HAIKU_KERNEL_NODE_H
7
8#include <fs_interface.h>
9#include <SupportDefs.h>
10
11#include <util/OpenHashTable.h>
12
13#include "FSCapabilities.h"
14
15
16namespace UserlandFS {
17
18class HaikuKernelVolume;
19
20using UserlandFSUtil::FSVNodeCapabilities;
21
22
23struct HaikuKernelNode : fs_vnode {
24	struct Capabilities;
25
26			ino_t				id;
27			HaikuKernelVolume*	volume;
28			Capabilities*		capabilities;
29			bool				published;
30
31public:
32	inline						HaikuKernelNode(HaikuKernelVolume* volume,
33									ino_t vnodeID, void* privateNode,
34									fs_vnode_ops* ops,
35									Capabilities* capabilities);
36								~HaikuKernelNode();
37
38	static	HaikuKernelNode*	GetNode(fs_vnode* node);
39
40			HaikuKernelVolume*	GetVolume() const	{ return volume; }
41};
42
43
44struct HaikuKernelNode::Capabilities {
45	int32				refCount;
46	fs_vnode_ops*		ops;
47	FSVNodeCapabilities	capabilities;
48	Capabilities*		hashLink;
49
50	Capabilities(fs_vnode_ops* ops, FSVNodeCapabilities	capabilities)
51		:
52		refCount(1),
53		ops(ops),
54		capabilities(capabilities)
55	{
56	}
57};
58
59
60HaikuKernelNode::HaikuKernelNode(HaikuKernelVolume* volume, ino_t vnodeID,
61	void* privateNode, fs_vnode_ops* ops, Capabilities* capabilities)
62	:
63	id(vnodeID),
64	volume(volume),
65	capabilities(capabilities),
66	published(false)
67{
68	this->private_node = privateNode;
69	this->ops = ops;
70}
71
72
73/*static*/ inline HaikuKernelNode*
74HaikuKernelNode::GetNode(fs_vnode* node)
75{
76	return static_cast<HaikuKernelNode*>(node);
77}
78
79
80}	// namespace UserlandFS
81
82using UserlandFS::HaikuKernelNode;
83
84#endif	// USERLAND_FS_NODE_H
85