< prev index next >
src/hotspot/share/gc/z/zArray.inline.hpp
Print this page
*** 28,115 ****
#include "memory/allocation.inline.hpp"
#include "runtime/atomic.hpp"
template <typename T>
inline ZArray<T>::ZArray() :
! _array(NULL),
! _size(0),
! _capacity(0) {}
!
! template <typename T>
! inline ZArray<T>::~ZArray() {
! FREE_C_HEAP_ARRAY(T, _array);
! }
!
! template <typename T>
! inline size_t ZArray<T>::size() const {
! return _size;
! }
!
! template <typename T>
! inline bool ZArray<T>::is_empty() const {
! return size() == 0;
! }
!
! template <typename T>
! inline T ZArray<T>::at(size_t index) const {
! assert(index < _size, "Index out of bounds");
! return _array[index];
! }
!
! template <typename T>
! inline void ZArray<T>::expand(size_t new_capacity) {
! T* new_array = NEW_C_HEAP_ARRAY(T, new_capacity, mtGC);
! if (_array != NULL) {
! memcpy(new_array, _array, sizeof(T) * _capacity);
! FREE_C_HEAP_ARRAY(T, _array);
! }
!
! _array = new_array;
! _capacity = new_capacity;
! }
!
! template <typename T>
! inline void ZArray<T>::add(T value) {
! if (_size == _capacity) {
! const size_t new_capacity = (_capacity > 0) ? _capacity * 2 : initial_capacity;
! expand(new_capacity);
! }
!
! _array[_size++] = value;
! }
template <typename T>
inline void ZArray<T>::transfer(ZArray<T>* from) {
! assert(_array == NULL, "Should be empty");
! _array = from->_array;
! _size = from->_size;
! _capacity = from->_capacity;
! from->_array = NULL;
! from->_size = 0;
! from->_capacity = 0;
! }
!
! template <typename T>
! inline void ZArray<T>::clear() {
! _size = 0;
}
template <typename T, bool parallel>
inline ZArrayIteratorImpl<T, parallel>::ZArrayIteratorImpl(ZArray<T>* array) :
_array(array),
_next(0) {}
template <typename T, bool parallel>
inline bool ZArrayIteratorImpl<T, parallel>::next(T* elem) {
if (parallel) {
! const size_t next = Atomic::fetch_and_add(&_next, 1u);
! if (next < _array->size()) {
*elem = _array->at(next);
return true;
}
} else {
! if (_next < _array->size()) {
*elem = _array->at(_next++);
return true;
}
}
--- 28,65 ----
#include "memory/allocation.inline.hpp"
#include "runtime/atomic.hpp"
template <typename T>
inline ZArray<T>::ZArray() :
! GrowableArrayCHeap<T, mtGC>(0) {}
template <typename T>
inline void ZArray<T>::transfer(ZArray<T>* from) {
! assert(this->_data == NULL, "Should be empty");
! this->_data = from->_data;
! this->_len = from->_len;
! this->_max = from->_max;
! from->_data = NULL;
! from->_len = 0;
! from->_max = 0;
}
template <typename T, bool parallel>
inline ZArrayIteratorImpl<T, parallel>::ZArrayIteratorImpl(ZArray<T>* array) :
_array(array),
_next(0) {}
template <typename T, bool parallel>
inline bool ZArrayIteratorImpl<T, parallel>::next(T* elem) {
if (parallel) {
! const int next = Atomic::fetch_and_add(&_next, 1);
! if (next < _array->length()) {
*elem = _array->at(next);
return true;
}
} else {
! if (_next < _array->length()) {
*elem = _array->at(_next++);
return true;
}
}
< prev index next >