src/jdk/nashorn/internal/runtime/arrays/LongArrayData.java

changeset 633
a2065f67857c
parent 505
36fb36217e1d
child 952
6d5471a497fb
child 963
e2497b11a021
     1.1 --- a/src/jdk/nashorn/internal/runtime/arrays/LongArrayData.java	Thu Oct 17 12:38:50 2013 +0200
     1.2 +++ b/src/jdk/nashorn/internal/runtime/arrays/LongArrayData.java	Thu Oct 17 17:33:16 2013 +0200
     1.3 @@ -92,7 +92,7 @@
     1.4  
     1.5      @Override
     1.6      public ArrayData convert(final Class<?> type) {
     1.7 -        if (type == Long.class) {
     1.8 +        if (type == Integer.class || type == Long.class) {
     1.9              return this;
    1.10          }
    1.11          final int length = (int) length();
    1.12 @@ -238,4 +238,32 @@
    1.13          final long newLength = to - start;
    1.14          return new LongArrayData(Arrays.copyOfRange(array, (int)from, (int)to), (int)newLength);
    1.15      }
    1.16 +
    1.17 +    @Override
    1.18 +    public ArrayData fastSplice(final int start, final int removed, final int added) throws UnsupportedOperationException {
    1.19 +        final long oldLength = length();
    1.20 +        final long newLength = oldLength - removed + added;
    1.21 +        if (newLength > SparseArrayData.MAX_DENSE_LENGTH && newLength > array.length) {
    1.22 +            throw new UnsupportedOperationException();
    1.23 +        }
    1.24 +        final ArrayData returnValue = (removed == 0) ?
    1.25 +                EMPTY_ARRAY : new LongArrayData(Arrays.copyOfRange(array, start, start + removed), removed);
    1.26 +
    1.27 +        if (newLength != oldLength) {
    1.28 +            final long[] newArray;
    1.29 +
    1.30 +            if (newLength > array.length) {
    1.31 +                newArray = new long[ArrayData.nextSize((int)newLength)];
    1.32 +                System.arraycopy(array, 0, newArray, 0, start);
    1.33 +            } else {
    1.34 +                newArray = array;
    1.35 +            }
    1.36 +
    1.37 +            System.arraycopy(array, start + removed, newArray, start + added, (int)(oldLength - start - removed));
    1.38 +            array = newArray;
    1.39 +            setLength(newLength);
    1.40 +        }
    1.41 +
    1.42 +        return returnValue;
    1.43 +    }
    1.44  }

mercurial