/*
* Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include "Index.h"
#include "DebugSupport.h"
#include "Directory.h"
#include "Node.h"
#include "IndexImpl.h"
// #pragma mark - Index
Index::Index()
:
fVolume(NULL),
fName(),
fType(0),
fKeyLength(0),
fFixedKeyLength(true)
{
}
Index::~Index()
{
}
status_t
Index::Init(Volume* volume, const char* name, uint32 type, bool fixedKeyLength,
size_t keyLength)
{
if (!fName.SetTo(name))
return B_NO_MEMORY;
fVolume = volume;
fType = type;
fKeyLength = keyLength;
fFixedKeyLength = fixedKeyLength;
return B_OK;
}
bool
Index::GetIterator(IndexIterator& iterator)
{
AbstractIndexIterator* actualIterator = InternalGetIterator();
iterator.SetIterator(actualIterator);
return actualIterator != NULL;
}
bool
Index::Find(const void* key, size_t length, IndexIterator& iterator)
{
AbstractIndexIterator* actualIterator
= key != NULL ? InternalFind(key, length) : NULL;
iterator.SetIterator(actualIterator);
return actualIterator != NULL;
}
void
Index::Dump()
{
D(
PRINT("Index: `%s', type: %" B_PRIx32 "\n", Name().Data(), Type());
IndexIterator it;
if (GetIterator(it)) {
while (Node* node = it.Next()) {
PRINT(" node: `%s', dir: %" B_PRIdINO "\n",
node->Name().Data(), node->Parent()->ID());
}
}
)
}
// #pragma mark - IndexIterator
IndexIterator::IndexIterator()
:
fIterator(NULL)
{
}
IndexIterator::~IndexIterator()
{
SetIterator(NULL);
}
bool
IndexIterator::HasNext() const
{
return fIterator != NULL && fIterator->HasNext();
}
Node*
IndexIterator::Next()
{
return fIterator != NULL ? fIterator->Next(NULL, NULL) : NULL;
}
Node*
IndexIterator::Next(void* buffer, size_t* _keyLength)
{
return fIterator != NULL ? fIterator->Next(buffer, _keyLength) : NULL;
}
status_t
IndexIterator::Suspend()
{
return fIterator != NULL ? fIterator->Suspend() : B_BAD_VALUE;
}
status_t
IndexIterator::Resume()
{
return fIterator != NULL ? fIterator->Resume() : B_BAD_VALUE;
}
void
IndexIterator::SetIterator(AbstractIndexIterator* iterator)
{
delete fIterator;
fIterator = iterator;
}
// #pragma mark - AbstractIndexIterator
AbstractIndexIterator::AbstractIndexIterator()
{
}
AbstractIndexIterator::~AbstractIndexIterator()
{
}
status_t
AbstractIndexIterator::Suspend()
{
return B_OK;
}
status_t
AbstractIndexIterator::Resume()
{
return B_OK;
}
↑ V730 Not all members of a class are initialized inside the constructor. Consider inspecting: fHashLink.