xref: /haiku/src/add-ons/kernel/file_systems/ramfs/NodeTable.h (revision 93a78ecaa45114d68952d08c4778f073515102f2)
1 // NodeTable.h
2 
3 #ifndef NODE_TABLE_H
4 #define NODE_TABLE_H
5 
6 #include "AllocationInfo.h"
7 #include "Node.h"
8 #include "OpenHashTable.h"
9 
10 // NodeHashElement
11 class NodeHashElement : public OpenHashElement {
12 public:
13 	NodeHashElement() : OpenHashElement(), fNode(NULL)
14 	{
15 		fNext = -1;
16 	}
17 
18 	static inline uint32 HashForID(ino_t id)
19 	{
20 		return uint32(id & 0xffffffff);
21 	}
22 
23 	static inline uint32 HashForID(Node *node)
24 	{
25 		return HashForID(node->GetID());
26 	}
27 
28 	inline uint32 Hash() const
29 	{
30 		return HashForID(fNode);
31 	}
32 
33 	inline bool operator==(const OpenHashElement &element) const
34 	{
35 		return (static_cast<const NodeHashElement&>(element).fNode == fNode);
36 	}
37 
38 	inline void Adopt(NodeHashElement &element)
39 	{
40 		fNode = element.fNode;
41 	}
42 
43 	Node	*fNode;
44 };
45 
46 // NodeTable
47 class NodeTable {
48 public:
49 	NodeTable();
50 	~NodeTable();
51 
52 	status_t InitCheck() const;
53 
54 	status_t AddNode(Node *node);
55 	status_t RemoveNode(Node *node);
56 	status_t RemoveNode(ino_t id);
57 	Node *GetNode(ino_t id);
58 
59 	// debugging
60 	void GetAllocationInfo(AllocationInfo &info);
61 
62 private:
63 	NodeHashElement *_FindElement(ino_t id) const;
64 
65 private:
66 	OpenHashElementArray<NodeHashElement>	fElementArray;
67 	OpenHashTable<NodeHashElement, OpenHashElementArray<NodeHashElement> >
68 		fNodes;
69 };
70 
71 // undefine the PRINT from <Debug.h>
72 //#undef PRINT
73 
74 #endif	// NODE_TABLE_H
75