1 /* 2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef NAME_INDEX_H 6 #define NAME_INDEX_H 7 8 9 #include "Index.h" 10 #include "NodeListener.h" 11 12 13 template<typename Policy> class GenericIndexIterator; 14 15 16 class NameIndex : public Index, private NodeListener { 17 public: 18 NameIndex(); 19 virtual ~NameIndex(); 20 21 status_t Init(Volume* volume); 22 23 virtual int32 CountEntries() const; 24 25 private: 26 virtual void NodeAdded(Node* node); 27 virtual void NodeRemoved(Node* node); 28 virtual void NodeChanged(Node* node, uint32 statFields, 29 const OldNodeAttributes& oldAttributes); 30 31 protected: 32 virtual AbstractIndexIterator* InternalGetIterator(); 33 virtual AbstractIndexIterator* InternalFind(const void* key, 34 size_t length); 35 36 private: 37 class EntryTree; 38 struct IteratorPolicy; 39 struct Iterator; 40 41 friend struct IteratorPolicy; 42 43 void _UpdateLiveQueries(Node* entry, 44 const char* oldName, const char* newName); 45 46 private: 47 EntryTree* fEntries; 48 }; 49 50 51 #endif // NAME_INDEX_H 52