155 for (arrayPtr = this->
objects, endPtr = arrayPtr + this->
arraySize; arrayPtr < endPtr; arrayPtr++)
186 for (
size_t i = 0; i < this->
arraySize; i++)
237 this->
put(value, position);
251 for (
size_t i = 0; i < this->
size(); i++)
278 for (
size_t i = 0; i < this->
size(); i++)
321 put(value, newIndex);
355 position =
size() + 1;
361 position = position + 1;
425 memmove(_target, _start, _end - _start);
430 for (
size_t i =
index - 1; i <
index + elements - 1; i++)
458 for (
size_t i =
index; i <
index + elements; i++)
468 memmove(_target, _start, _end - _start);
487 put(value, newIndex);
515 _result = *(this->
data() + position - 1);
536 if (position > this->
size())
540 return get(position);
554 if (position > this->
size())
598 if (_index > 0 && _index <= this->
size() && *(this->
data() + _index - 1) !=
OREF_NULL)
601 result = *(this->
data() + _index - 1);
640 result = *(this->
data() + position - 1);
671 for (
size_t i = 0; i < realArray->
arraySize; i++)
736 if (this->
size() == 0)
788 size_t slotCount = this->
size();
789 size_t itemCount = this->
items();
798 for (
size_t i = 1; i <= slotCount; i++)
803 values->
put(item, count);
860 indexCount = indirect->
items();
861 _index = indirect->
data();
876 if (this->
size() != 0)
889 return this->
validateIndex(_index, indexCount, _start, bounds_error, position);
914 else if (indexCount == 0)
922 if (position > this->
size() )
949 numsubs = indexCount;
952 if (numsubs == numSize)
957 for (i = numsubs; i > 0; i--)
960 value = _index[i - 1];
971 if (position > _dimension)
980 return this->
validateIndex(_index, indexCount, _start, bounds_error, position);
993 offset += multiplier * (position - 1);
994 multiplier *= _dimension;
996 position = offset + 1;
999 else if (numsubs < numSize)
1005 #ifdef EXTEND_DIMENSIONS 1009 if (this->
size() != 0)
1018 this->extendMuti(_index, indexCount, _start);
1021 return this->
validateIndex(_index, indexCount, _start, bounds_error, position);
1045 if (newSize > this->
size())
1087 if (_end == 0 || _end > this->
size())
1089 _end = this->
size();
1093 newSize = _end + 1 - _start;
1135 nend = this->
size();
1148 if (nstart > this->
size())
1156 if (nend > this->
size() - nstart + 1)
1158 nend = this->
size() - nstart + 1;
1169 for (
size_t i = 1; i <= nend; i++)
1172 rref->
put(this->
get(nstart + i - 1), i);
1190 if (_start > this->
size())
1198 if (_end > this->
size() - _start + 1)
1201 _end = this->
size() - _start + 1;
1214 for (i = 1; i <= _end; i++)
1233 size_t _arraySize = this->
size();
1238 for (i = 0; i < _arraySize && thisObject[i] ==
OREF_NULL; i++);
1240 if (i == _arraySize)
1277 size_t _arraySize = this->
size();
1281 for (
size_t i = 0; i < _arraySize; i++)
1286 return thisObject[i];
1333 size_t _arraySize = this->
size();
1338 for (i = position; i < _arraySize && thisObject[i] ==
OREF_NULL; i++);
1340 if (i >= this->
size())
1361 size_t i = position;
1363 size_t _arraySize = this->
size();
1381 for (; i > 0 && thisObject[i-1] ==
OREF_NULL; i--);
1433 if (_index > 0 && _index <= this->
size() && *(this->
data() + _index - 1) !=
OREF_NULL)
1468 for (
size_t iterator = 0; iterator < this->
size(); iterator++ )
1473 newArray->
put(item[iterator], ++count);
1496 for (
size_t iterator = 0; iterator < this->
size(); iterator++ )
1521 return toString(format, separator);
1546 _items = newArray->
items();
1579 for (i = 1; i <=_items ; i++)
1581 item = newArray->
get(i);
1587 mutbuffer->
append(_stringValue);
1592 else if (i_form == 2)
1606 for (i = 1; i <= _items; i++)
1608 item = newArray->
get(i);
1619 mutbuffer->
append(_stringValue);
1684 size_t _size = this->
size();
1685 size_t newSize = _size - amount;
1687 size_t i = newSize + 1;
1688 for (i = newSize + 1; i <= _size; i++)
1703 size_t _size = this->
size();
1704 for (
size_t i = 1; i <= _size; i++)
1706 if (this->
get(i) == target)
1731 size_t newSize = this->
size() + extension;
1732 size_t extendSize = this->
size() / 2;
1765 for (
size_t i = 1; i <= this->
size(); i++)
1826 for (
size_t i = dims; i > 0; i--)
1833 size_t digit = idx % _dimension;
1837 idx = (idx - digit) / _dimension;
1914 size_t newDimension)
1924 size_t oldDimension;
1965 for (i= 1; i <= oldDimSize; i++)
1970 if (newDimSize > oldDimSize)
1979 skipAmount *= (newDimSize - oldDimSize);
2014 size_t additionalDim;
2016 size_t newDimension;
2017 size_t oldDimension;
2021 size_t newDimArraySize;
2023 size_t firstDimChanged = 0;
2035 newDimArraySize = _indexCount;
2036 newDimArray =
new_array(newDimArraySize);
2044 i = newDimArraySize - 1;
2048 if (newDimSize > this->
size())
2055 tempSize = this->
size();
2061 for (oldDimension = this->
dimensions->
size(), newDimension = newDimArraySize;
2063 oldDimension--, newDimension--)
2069 newDimSize = _index[newDimension - 1]->
requiredPositive((
int)newDimension);
2072 if (newDimSize > currDimSize)
2076 if (!firstDimChanged)
2079 firstDimChanged = newDimension;
2093 additionalDim = newDimArraySize - 1;
2102 if (additionalDim > 0)
2105 for (newDimension = additionalDim;
2110 newDimSize = ((
RexxInteger *)_index[newDimension - 1])->getValue();
2128 this->
size() == 0 ||
2129 !firstDimChanged || firstDimChanged <= additionalDim + 1)
2145 for (i = newDimArraySize, accumSize = 1;
2146 i > firstDimChanged ;
2201 this->
put(value, _index);
2225 void * RexxArray::operator
new(
size_t size,
2239 for (;items > 0; items--)
2283 if ((
size_t)total_size >= MAX_FIXEDARRAY_SIZE)
2294 if (total_size == 0)
2322 size_t total_size = 1;
2323 for (
size_t i = 0; i < count; i++)
2339 total_size *= cur_size;
2373 size_t len = right - left + 1;
2376 for (
size_t i = left + 1; i <= right; i++) {
2379 if (comparator.
compare(current, prev) < 0) {
2383 }
while (j > left && comparator.
compare(current, prev =
get(j - 1)) < 0);
2390 size_t mid = (right + left) / 2;
2391 mergeSort(comparator, working, left, mid);
2392 mergeSort(comparator, working, mid + 1, right);
2393 merge(comparator, working, left, mid + 1, right);
2409 size_t leftEnd = mid - 1;
2417 size_t leftCursor = left;
2418 size_t rightCursor = mid;
2419 size_t workingPosition = left;
2429 if (comparator.
compare(fromVal, rightVal) <= 0)
2432 size_t leftInsertion =
find(comparator, rightVal, -1, leftCursor + 1, leftEnd);
2434 size_t toCopy = leftInsertion - leftCursor + 1;
2435 arraycopy(
this, leftCursor, working, workingPosition, toCopy);
2436 workingPosition += toCopy;
2438 working->
put(rightVal, workingPosition++);
2443 leftCursor = leftInsertion + 1;
2449 size_t rightInsertion =
find(comparator, fromVal, 0, rightCursor + 1, right);
2450 size_t toCopy = rightInsertion - rightCursor + 1;
2451 arraycopy(
this, rightCursor, working, workingPosition, toCopy);
2452 workingPosition += toCopy;
2454 working->
put(fromVal, workingPosition++);
2456 rightCursor = rightInsertion + 1;
2458 }
while (right >= rightCursor && mid > leftCursor);
2462 if (leftCursor < mid)
2464 arraycopy(
this, leftCursor, working, workingPosition, mid - leftCursor);
2468 arraycopy(
this, rightCursor, working, workingPosition, right - rightCursor + 1);
2472 arraycopy(working, left,
this, left, right - left + 1);
2487 for (
size_t i =
start; i <
start + count; i++)
2512 size_t checkPoint = left;
2514 while (checkPoint <= right)
2517 if (comparator.
compare(val,
get(checkPoint)) > limit)
2520 left = checkPoint + 1;
2525 right = checkPoint - 1;
2529 checkPoint += delta;
2535 while (left <= right)
2538 checkPoint = (left + right) / 2;
2539 if (comparator.
compare(val,
get(checkPoint)) > limit)
2542 left = checkPoint + 1;
2547 right = checkPoint - 1;
2564 size_t count =
items();
2572 for (
size_t i = 1; i <= count; i++)
2587 mergeSort(comparator, working, 1, count);
2602 size_t count =
items();
2610 for (
size_t i = 1; i <= count; i++)
2638 aref->
put(first, 1);
2648 aref->
put(first, 1);
2649 aref->
put(second, 2);
2653 void * RexxArray::operator
new(
size_t size,
2664 aref->
put(first, 1);
2665 aref->
put(second, 2);
2666 aref->
put(third, 3);
2671 void * RexxArray::operator
new(
size_t size,
2683 aref->
put(first, 1);
2684 aref->
put(second, 2);
2685 aref->
put(third, 3);
2686 aref->
put(fourth, 4);
2691 void *RexxArray::operator
new(
size_t newSize,
size_t size,
size_t maxSize,
RexxClass *arrayClass)
2699 if (maxSize <= ARRAY_MIN_SIZE)
2701 maxSize = ARRAY_MIN_SIZE;
2709 bytes = newSize + (
sizeof(
RexxObject *) * (maxSize - 1));
2713 newArray->
setBehaviour(arrayClass->getInstanceBehaviour());
2715 newArray->arraySize = size;
2716 newArray->maximumSize = maxSize;
2718 newArray->expansionArray = newArray;
2721 if (arrayClass->hasUninitDefined())
2725 newArray->hasUninit();
2757 for (i = 0; i < argCount; i++)
2770 newArray =
new (argCount, args)
RexxArray;