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