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