⛏️ index : haiku.git

/*
 * 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"

// constructor
NodeTable::NodeTable()
{
	fInitStatus = fNodes.Init(1000);
}

// destructor
NodeTable::~NodeTable()
{
}

// InitCheck
status_t
NodeTable::InitCheck() const
{
	RETURN_ERROR(fInitStatus);
}

// AddNode
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;
}

// RemoveNode
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;
}

// RemoveNode
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;
}

// GetNode
Node *
NodeTable::GetNode(ino_t id)
{
	Node *node = fNodes.Lookup(id);
	return node;
}

// GetAllocationInfo
void
NodeTable::GetAllocationInfo(AllocationInfo &info)
{
	info.AddNodeTableAllocation(0, fNodes.TableSize(),
		sizeof(Node*), fNodes.CountElements());
}