⛏️ index : haiku.git

/*
 * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
 * All rights reserved. Distributed under the terms of the MIT license.
 */
#ifndef ATTRIBUTE_INDEX_IMPL_H
#define ATTRIBUTE_INDEX_IMPL_H

#include "AttributeIndex.h"

// AttributeIndexImpl
class AttributeIndexImpl : public AttributeIndex {
public:
	AttributeIndexImpl(Volume *volume, const char *name, uint32 type,
					   size_t keyLength);
	virtual ~AttributeIndexImpl();

	virtual int32 CountEntries() const;

	virtual status_t Changed(Attribute *attribute,
							 const uint8 *oldKey, size_t oldLength);

private:
	virtual status_t Added(Attribute *attribute);
	virtual bool Removed(Attribute *attribute);

protected:
	virtual AbstractIndexEntryIterator *InternalGetIterator();
	virtual AbstractIndexEntryIterator *InternalFind(const uint8 *key,
													 size_t length);

private:
	class Iterator;
	class IteratorList;
	class AttributeTree;

	class PrimaryKey;
	class GetPrimaryKey;
	class PrimaryKeyCompare;

	friend class Iterator;

private:
	void _AddIterator(Iterator *iterator);
	void _RemoveIterator(Iterator *iterator);

private:
	AttributeTree	*fAttributes;
	IteratorList	*fIterators;
};

#endif	// ATTRIBUTE_INDEX_IMPL_H