src/share/vm/utilities/array.cpp

changeset 3901
24b9c7f4cae6
parent 3900
d2a62e0f25eb
child 4153
b9a9ed0f8eeb
equal deleted inserted replaced
3898:bcffa4c5eef6 3901:24b9c7f4cae6
47 47
48 48
49 void ResourceArray::sort(size_t esize, ftype f) { 49 void ResourceArray::sort(size_t esize, ftype f) {
50 if (!is_empty()) qsort(_data, length(), esize, f); 50 if (!is_empty()) qsort(_data, length(), esize, f);
51 } 51 }
52 void CHeapArray::sort(size_t esize, ftype f) { 52 template <MEMFLAGS F> void CHeapArray<F>::sort(size_t esize, ftype f) {
53 if (!is_empty()) qsort(_data, length(), esize, f); 53 if (!is_empty()) qsort(_data, length(), esize, f);
54 } 54 }
55 55
56 56
57 void ResourceArray::expand(size_t esize, int i, int& size) { 57 void ResourceArray::expand(size_t esize, int i, int& size) {
68 memcpy(data, _data, esize * length()); 68 memcpy(data, _data, esize * length());
69 _data = data; 69 _data = data;
70 } 70 }
71 71
72 72
73 void CHeapArray::expand(size_t esize, int i, int& size) { 73 template <MEMFLAGS F> void CHeapArray<F>::expand(size_t esize, int i, int& size) {
74 // determine new size 74 // determine new size
75 if (size == 0) size = 4; // prevent endless loop 75 if (size == 0) size = 4; // prevent endless loop
76 while (i >= size) size *= 2; 76 while (i >= size) size *= 2;
77 // allocate and initialize new data section 77 // allocate and initialize new data section
78 void* data = NEW_C_HEAP_ARRAY(char*, esize * size); 78 void* data = NEW_C_HEAP_ARRAY(char*, esize * size, F);
79 memcpy(data, _data, esize * length()); 79 memcpy(data, _data, esize * length());
80 FREE_C_HEAP_ARRAY(char*, _data); 80 FREE_C_HEAP_ARRAY(char*, _data, F);
81 _data = data; 81 _data = data;
82 } 82 }
83 83
84 84
85 void ResourceArray::remove_at(size_t esize, int i) { 85 void ResourceArray::remove_at(size_t esize, int i) {
89 void* src = (char*)dst + esize; 89 void* src = (char*)dst + esize;
90 size_t cnt = (length() - i)*esize; 90 size_t cnt = (length() - i)*esize;
91 memmove(dst, src, cnt); 91 memmove(dst, src, cnt);
92 } 92 }
93 93
94 void CHeapArray::remove_at(size_t esize, int i) { 94 template <MEMFLAGS F> void CHeapArray<F>::remove_at(size_t esize, int i) {
95 assert(0 <= i && i < length(), "index out of bounds"); 95 assert(0 <= i && i < length(), "index out of bounds");
96 _length--; 96 _length--;
97 void* dst = (char*)_data + i*esize; 97 void* dst = (char*)_data + i*esize;
98 void* src = (char*)dst + esize; 98 void* src = (char*)dst + esize;
99 size_t cnt = (length() - i)*esize; 99 size_t cnt = (length() - i)*esize;

mercurial