1// QueryIterator.cpp 2 3#include "QueryIterator.h" 4 5// constructor 6QueryIterator::QueryIterator(Volume* volume) 7 : 8 BReferenceable(), 9 fVolume(volume), 10 fParentIterator(NULL), 11 fVolumeLink() 12{ 13} 14 15// destructor 16QueryIterator::~QueryIterator() 17{ 18} 19 20// GetVolume 21Volume* 22QueryIterator::GetVolume() const 23{ 24 return fVolume; 25} 26 27// SetParentIterator 28void 29QueryIterator::SetParentIterator(HierarchicalQueryIterator* parent) 30{ 31 fParentIterator = parent; 32} 33 34// GetParentIterator 35HierarchicalQueryIterator* 36QueryIterator::GetParentIterator() const 37{ 38 return fParentIterator; 39} 40 41// ReadQuery 42status_t 43QueryIterator::ReadQuery(struct dirent* buffer, size_t bufferSize, int32 count, 44 int32* countRead, bool* done) 45{ 46 *countRead = 0; 47 *done = true; 48 return B_OK; 49} 50 51 52void 53QueryIterator::LastReferenceReleased() 54{ 55 // don't delete 56} 57 58 59// #pragma mark - 60 61// constructor 62HierarchicalQueryIterator::HierarchicalQueryIterator(Volume* volume) 63 : QueryIterator(volume), 64 fSubIterators(), 65 fCurrentSubIterator(NULL) 66{ 67} 68 69// destructor 70HierarchicalQueryIterator::~HierarchicalQueryIterator() 71{ 72} 73 74// GetCurrentSubIterator 75QueryIterator* 76HierarchicalQueryIterator::GetCurrentSubIterator() const 77{ 78 return fCurrentSubIterator; 79} 80 81// NextSubIterator 82QueryIterator* 83HierarchicalQueryIterator::NextSubIterator() 84{ 85 if (fCurrentSubIterator) 86 fCurrentSubIterator = fSubIterators.GetNext(fCurrentSubIterator); 87 return fCurrentSubIterator; 88} 89 90// RewindSubIterator 91void 92HierarchicalQueryIterator::RewindSubIterator() 93{ 94 fCurrentSubIterator = fSubIterators.First(); 95} 96 97// AddSubIterator 98void 99HierarchicalQueryIterator::AddSubIterator(QueryIterator* subIterator) 100{ 101 if (!subIterator) 102 return; 103 104 fSubIterators.Insert(subIterator); 105 subIterator->SetParentIterator(this); 106 if (!fCurrentSubIterator) 107 fCurrentSubIterator = subIterator; 108} 109 110// RemoveSubIterator 111void 112HierarchicalQueryIterator::RemoveSubIterator(QueryIterator* subIterator) 113{ 114 if (!subIterator) 115 return; 116 117 if (fCurrentSubIterator == subIterator) 118 NextSubIterator(); 119 subIterator->SetParentIterator(NULL); 120 fSubIterators.Remove(subIterator); 121} 122 123// RemoveAllSubIterators 124void 125HierarchicalQueryIterator::RemoveAllSubIterators( 126 DoublyLinkedList<QueryIterator>& subIterators) 127{ 128 while (QueryIterator* iterator = fSubIterators.First()) { 129 RemoveSubIterator(iterator); 130 subIterators.Insert(iterator); 131 } 132} 133 134