84 _size = from->_size;
85 _capacity = from->_capacity;
86 from->_array = NULL;
87 from->_size = 0;
88 from->_capacity = 0;
89 }
90
91 template <typename T>
92 inline void ZArray<T>::clear() {
93 _size = 0;
94 }
95
96 template <typename T, bool parallel>
97 inline ZArrayIteratorImpl<T, parallel>::ZArrayIteratorImpl(ZArray<T>* array) :
98 _array(array),
99 _next(0) {}
100
101 template <typename T, bool parallel>
102 inline bool ZArrayIteratorImpl<T, parallel>::next(T* elem) {
103 if (parallel) {
104 const size_t next = Atomic::add(1u, &_next) - 1u;
105 if (next < _array->size()) {
106 *elem = _array->at(next);
107 return true;
108 }
109 } else {
110 if (_next < _array->size()) {
111 *elem = _array->at(_next++);
112 return true;
113 }
114 }
115
116 // No more elements
117 return false;
118 }
119
120 template <typename T>
121 inline ZArrayIterator<T>::ZArrayIterator(ZArray<T>* array) :
122 ZArrayIteratorImpl<T, ZARRAY_SERIAL>(array) {}
123
124 template <typename T>
|
84 _size = from->_size;
85 _capacity = from->_capacity;
86 from->_array = NULL;
87 from->_size = 0;
88 from->_capacity = 0;
89 }
90
91 template <typename T>
92 inline void ZArray<T>::clear() {
93 _size = 0;
94 }
95
96 template <typename T, bool parallel>
97 inline ZArrayIteratorImpl<T, parallel>::ZArrayIteratorImpl(ZArray<T>* array) :
98 _array(array),
99 _next(0) {}
100
101 template <typename T, bool parallel>
102 inline bool ZArrayIteratorImpl<T, parallel>::next(T* elem) {
103 if (parallel) {
104 const size_t next = Atomic::add(&_next, 1u) - 1u;
105 if (next < _array->size()) {
106 *elem = _array->at(next);
107 return true;
108 }
109 } else {
110 if (_next < _array->size()) {
111 *elem = _array->at(_next++);
112 return true;
113 }
114 }
115
116 // No more elements
117 return false;
118 }
119
120 template <typename T>
121 inline ZArrayIterator<T>::ZArrayIterator(ZArray<T>* array) :
122 ZArrayIteratorImpl<T, ZARRAY_SERIAL>(array) {}
123
124 template <typename T>
|