1/*
2 * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * All rights reserved. Distributed under the terms of the MIT license.
4 */
5
6#include "DebugSupport.h"
7#include "NodeTable.h"
8
9// constructor
10NodeTable::NodeTable()
11{
12	fInitStatus = fNodes.Init(1000);
13}
14
15// destructor
16NodeTable::~NodeTable()
17{
18}
19
20// InitCheck
21status_t
22NodeTable::InitCheck() const
23{
24	RETURN_ERROR(fInitStatus);
25}
26
27// AddNode
28status_t
29NodeTable::AddNode(Node *node)
30{
31	status_t error = (node ? B_OK : B_BAD_VALUE);
32	if (error == B_OK) {
33		if (fNodes.Lookup(node->GetID()) != NULL)
34			fNodes.Remove(node);
35		SET_ERROR(error, fNodes.Insert(node));
36	}
37	return error;
38}
39
40// RemoveNode
41status_t
42NodeTable::RemoveNode(Node *node)
43{
44	status_t error = (node ? B_OK : B_BAD_VALUE);
45	if (error == B_OK)
46		error = RemoveNode(node->GetID());
47	return error;
48}
49
50// RemoveNode
51status_t
52NodeTable::RemoveNode(ino_t id)
53{
54	status_t error = B_OK;
55	if (Node *element = fNodes.Lookup(id))
56		fNodes.Remove(element);
57	else
58		error = B_ERROR;
59	return error;
60}
61
62// GetNode
63Node *
64NodeTable::GetNode(ino_t id)
65{
66	Node *node = fNodes.Lookup(id);
67	return node;
68}
69
70// GetAllocationInfo
71void
72NodeTable::GetAllocationInfo(AllocationInfo &info)
73{
74	info.AddNodeTableAllocation(0, fNodes.TableSize(),
75		sizeof(Node*), fNodes.CountElements());
76}
77