133 public ArrayData shrink(final long newLength) { 134 Arrays.fill(array, (int) newLength, array.length, ScriptRuntime.UNDEFINED); 135 return this; 136 } 137 138 @Override 139 public ArrayData set(final int index, final Object value, final boolean strict) { 140 array[index] = value; 141 setLength(Math.max(index + 1, length())); 142 return this; 143 } 144 145 @Override 146 public ArrayData set(final int index, final int value, final boolean strict) { 147 array[index] = value; 148 setLength(Math.max(index + 1, length())); 149 return this; 150 } 151 152 @Override 153 public ArrayData set(final int index, final long value, final boolean strict) { 154 array[index] = value; 155 setLength(Math.max(index + 1, length())); 156 return this; 157 } 158 159 @Override 160 public ArrayData set(final int index, final double value, final boolean strict) { 161 array[index] = value; 162 setLength(Math.max(index + 1, length())); 163 return this; 164 } 165 166 @Override 167 public ArrayData setEmpty(final int index) { 168 array[index] = ScriptRuntime.EMPTY; 169 return this; 170 } 171 172 @Override 173 public ArrayData setEmpty(final long lo, final long hi) { 174 // hi parameter is inclusive, but Arrays.fill toIndex parameter is exclusive 175 Arrays.fill(array, (int)Math.max(lo, 0L), (int)Math.min(hi + 1, Integer.MAX_VALUE), ScriptRuntime.EMPTY); 176 return this; 177 } 178 179 private static final MethodHandle HAS_GET_ELEM = specialCall(MethodHandles.lookup(), ObjectArrayData.class, "getElem", Object.class, int.class).methodHandle(); 196 throw new ClassCastException(); 197 } 198 199 @Override 200 public MethodHandle getElementGetter(final Class<?> returnType, final int programPoint) { 201 if (returnType.isPrimitive()) { 202 return null; 203 } 204 return getContinuousElementGetter(HAS_GET_ELEM, returnType, programPoint); 205 } 206 207 @Override 208 public MethodHandle getElementSetter(final Class<?> elementType) { 209 return getContinuousElementSetter(SET_ELEM, Object.class); 210 } 211 212 213 @Override 214 public int getInt(final int index) { 215 return JSType.toInt32(array[index]); 216 } 217 218 @Override 219 public long getLong(final int index) { 220 return JSType.toLong(array[index]); 221 } 222 223 @Override 224 public double getDouble(final int index) { 225 return JSType.toNumber(array[index]); 226 } 227 228 @Override 229 public Object getObject(final int index) { 230 return array[index]; 231 } 232 233 @Override 234 public boolean has(final int index) { 235 return 0 <= index && index < length(); 236 } 237 238 @Override 239 public ArrayData delete(final int index) { 240 setEmpty(index); | 133 public ArrayData shrink(final long newLength) { 134 Arrays.fill(array, (int) newLength, array.length, ScriptRuntime.UNDEFINED); 135 return this; 136 } 137 138 @Override 139 public ArrayData set(final int index, final Object value, final boolean strict) { 140 array[index] = value; 141 setLength(Math.max(index + 1, length())); 142 return this; 143 } 144 145 @Override 146 public ArrayData set(final int index, final int value, final boolean strict) { 147 array[index] = value; 148 setLength(Math.max(index + 1, length())); 149 return this; 150 } 151 152 @Override 153 public ArrayData set(final int index, final double value, final boolean strict) { 154 array[index] = value; 155 setLength(Math.max(index + 1, length())); 156 return this; 157 } 158 159 @Override 160 public ArrayData setEmpty(final int index) { 161 array[index] = ScriptRuntime.EMPTY; 162 return this; 163 } 164 165 @Override 166 public ArrayData setEmpty(final long lo, final long hi) { 167 // hi parameter is inclusive, but Arrays.fill toIndex parameter is exclusive 168 Arrays.fill(array, (int)Math.max(lo, 0L), (int)Math.min(hi + 1, Integer.MAX_VALUE), ScriptRuntime.EMPTY); 169 return this; 170 } 171 172 private static final MethodHandle HAS_GET_ELEM = specialCall(MethodHandles.lookup(), ObjectArrayData.class, "getElem", Object.class, int.class).methodHandle(); 189 throw new ClassCastException(); 190 } 191 192 @Override 193 public MethodHandle getElementGetter(final Class<?> returnType, final int programPoint) { 194 if (returnType.isPrimitive()) { 195 return null; 196 } 197 return getContinuousElementGetter(HAS_GET_ELEM, returnType, programPoint); 198 } 199 200 @Override 201 public MethodHandle getElementSetter(final Class<?> elementType) { 202 return getContinuousElementSetter(SET_ELEM, Object.class); 203 } 204 205 206 @Override 207 public int getInt(final int index) { 208 return JSType.toInt32(array[index]); 209 } 210 211 @Override 212 public double getDouble(final int index) { 213 return JSType.toNumber(array[index]); 214 } 215 216 @Override 217 public Object getObject(final int index) { 218 return array[index]; 219 } 220 221 @Override 222 public boolean has(final int index) { 223 return 0 <= index && index < length(); 224 } 225 226 @Override 227 public ArrayData delete(final int index) { 228 setEmpty(index); |