@Specialization(guards = "strategy.matches(array)", limit = "ARRAY_STRATEGIES")
  public boolean ensureCapacity(
      DynamicObject array,
      int requiredCapacity,
      @Cached("of(array)") ArrayStrategy strategy,
      @Cached("createCountingProfile()") ConditionProfile extendProfile) {
    final ArrayMirror mirror = strategy.newMirror(array);

    if (extendProfile.profile(mirror.getLength() < requiredCapacity)) {
      final int capacity = ArrayUtils.capacity(getContext(), mirror.getLength(), requiredCapacity);
      Layouts.ARRAY.setStore(array, mirror.copyArrayAndMirror(capacity).getArray());
      return true;
    } else {
      return false;
    }
  }
示例#2
0
 @Override
 public void copyTo(ArrayMirror destination, int sourceStart, int destinationStart, int count) {
   System.arraycopy(array, sourceStart, destination.getArray(), destinationStart, count);
 }
示例#3
0
 @Override
 public void copyTo(ArrayMirror destination, int sourceStart, int destinationStart, int count) {
   for (int i = 0; i < count; i++) {
     destination.set(destinationStart + i, array[sourceStart + i]);
   }
 }