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