* Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
* All rights reserved. Distributed under the terms of the MIT license.
*/
#include "DebugSupport.h"
#include "NodeTable.h"
NodeTable::NodeTable()
{
fInitStatus = fNodes.Init(1000);
}
NodeTable::~NodeTable()
{
}
status_t
NodeTable::InitCheck() const
{
RETURN_ERROR(fInitStatus);
}
status_t
NodeTable::AddNode(Node *node)
{
status_t error = (node ? B_OK : B_BAD_VALUE);
if (error == B_OK) {
if (fNodes.Lookup(node->GetID()) != NULL)
fNodes.Remove(node);
SET_ERROR(error, fNodes.Insert(node));
}
return error;
}
status_t
NodeTable::RemoveNode(Node *node)
{
status_t error = (node ? B_OK : B_BAD_VALUE);
if (error == B_OK)
error = RemoveNode(node->GetID());
return error;
}
status_t
NodeTable::RemoveNode(ino_t id)
{
status_t error = B_OK;
if (Node *element = fNodes.Lookup(id))
fNodes.Remove(element);
else
error = B_ERROR;
return error;
}
Node *
NodeTable::GetNode(ino_t id)
{
Node *node = fNodes.Lookup(id);
return node;
}
void
NodeTable::GetAllocationInfo(AllocationInfo &info)
{
info.AddNodeTableAllocation(0, fNodes.TableSize(),
sizeof(Node*), fNodes.CountElements());
}