< prev index next >

src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/arrays/IntArrayData.java

Print this page




 139 
 140         for (int index = 0; index < len; index++) {
 141             oarray[index] = array[index];
 142         }
 143 
 144         return oarray;
 145     }
 146 
 147     private double[] toDoubleArray() {
 148         assert length() <= array.length : "length exceeds internal array size";
 149         final int len = (int)length();
 150         final double[] darray = new double[array.length];
 151 
 152         for (int index = 0; index < len; index++) {
 153             darray[index] = array[index];
 154         }
 155 
 156         return darray;
 157     }
 158 
 159     private long[] toLongArray() {
 160         assert length() <= array.length : "length exceeds internal array size";
 161         final int len = (int)length();
 162         final long[] larray = new long[array.length];
 163 
 164         for (int index = 0; index < len; index++) {
 165             larray[index] = array[index];
 166         }
 167 
 168         return larray;
 169     }
 170 
 171     private LongArrayData convertToLong() {
 172         return new LongArrayData(toLongArray(), (int)length());
 173     }
 174 
 175     private NumberArrayData convertToDouble() {
 176         return new NumberArrayData(toDoubleArray(), (int)length());
 177     }
 178 
 179     private ObjectArrayData convertToObject() {
 180         return new ObjectArrayData(toObjectArray(false), (int)length());
 181     }
 182 
 183     @Override
 184     public ArrayData convert(final Class<?> type) {
 185         if (type == Integer.class || type == Byte.class || type == Short.class) {
 186             return this;
 187         } else if (type == Long.class) {
 188             return convertToLong();
 189         } else if (type == Double.class || type == Float.class) {
 190             return convertToDouble();
 191         } else {
 192             return convertToObject();
 193         }
 194     }
 195 
 196     @Override
 197     public void shiftLeft(final int by) {
 198         System.arraycopy(array, by, array, 0, array.length - by);
 199     }
 200 
 201     @Override
 202     public ArrayData shiftRight(final int by) {
 203         final ArrayData newData = ensure(by + length() - 1);
 204         if (newData != this) {
 205             newData.shiftRight(by);
 206             return newData;
 207         }
 208         System.arraycopy(array, 0, array, by, array.length - by);


 236     public ArrayData set(final int index, final Object value, final boolean strict) {
 237         if (JSType.isRepresentableAsInt(value)) {
 238             return set(index, JSType.toInt32(value), strict);
 239         } else if (value == ScriptRuntime.UNDEFINED) {
 240             return new UndefinedArrayFilter(this).set(index, value, strict);
 241         }
 242 
 243         final ArrayData newData = convert(value == null ? Object.class : value.getClass());
 244         return newData.set(index, value, strict);
 245     }
 246 
 247     @Override
 248     public ArrayData set(final int index, final int value, final boolean strict) {
 249         array[index] = value;
 250         setLength(Math.max(index + 1, length()));
 251 
 252         return this;
 253     }
 254 
 255     @Override
 256     public ArrayData set(final int index, final long value, final boolean strict) {
 257         if (JSType.isRepresentableAsInt(value)) {
 258             array[index] = JSType.toInt32(value);
 259             setLength(Math.max(index + 1, length()));
 260             return this;
 261         }
 262 
 263         return convert(Long.class).set(index, value, strict);
 264     }
 265 
 266     @Override
 267     public ArrayData set(final int index, final double value, final boolean strict) {
 268         if (JSType.isRepresentableAsInt(value)) {
 269             array[index] = (int)(long)value;
 270             setLength(Math.max(index + 1, length()));
 271             return this;
 272         }
 273 
 274         return convert(Double.class).set(index, value, strict);
 275     }
 276 
 277     @Override
 278     public int getInt(final int index) {
 279         return array[index];
 280     }
 281 
 282     @Override
 283     public int getIntOptimistic(final int index, final int programPoint) {
 284         return array[index];
 285     }
 286 
 287     @Override
 288     public long getLong(final int index) {
 289         return array[index];
 290     }
 291 
 292     @Override
 293     public long getLongOptimistic(final int index, final int programPoint) {
 294         return array[index];
 295     }
 296 
 297     @Override
 298     public double getDouble(final int index) {
 299         return array[index];
 300     }
 301 
 302     @Override
 303     public double getDoubleOptimistic(final int index, final int programPoint) {
 304         return array[index];
 305     }
 306 
 307     @Override
 308     public Object getObject(final int index) {
 309         return array[index];
 310     }
 311 
 312     @Override
 313     public boolean has(final int index) {




 139 
 140         for (int index = 0; index < len; index++) {
 141             oarray[index] = array[index];
 142         }
 143 
 144         return oarray;
 145     }
 146 
 147     private double[] toDoubleArray() {
 148         assert length() <= array.length : "length exceeds internal array size";
 149         final int len = (int)length();
 150         final double[] darray = new double[array.length];
 151 
 152         for (int index = 0; index < len; index++) {
 153             darray[index] = array[index];
 154         }
 155 
 156         return darray;
 157     }
 158 
















 159     private NumberArrayData convertToDouble() {
 160         return new NumberArrayData(toDoubleArray(), (int)length());
 161     }
 162 
 163     private ObjectArrayData convertToObject() {
 164         return new ObjectArrayData(toObjectArray(false), (int)length());
 165     }
 166 
 167     @Override
 168     public ArrayData convert(final Class<?> type) {
 169         if (type == Integer.class || type == Byte.class || type == Short.class) {
 170             return this;


 171         } else if (type == Double.class || type == Float.class) {
 172             return convertToDouble();
 173         } else {
 174             return convertToObject();
 175         }
 176     }
 177 
 178     @Override
 179     public void shiftLeft(final int by) {
 180         System.arraycopy(array, by, array, 0, array.length - by);
 181     }
 182 
 183     @Override
 184     public ArrayData shiftRight(final int by) {
 185         final ArrayData newData = ensure(by + length() - 1);
 186         if (newData != this) {
 187             newData.shiftRight(by);
 188             return newData;
 189         }
 190         System.arraycopy(array, 0, array, by, array.length - by);


 218     public ArrayData set(final int index, final Object value, final boolean strict) {
 219         if (JSType.isRepresentableAsInt(value)) {
 220             return set(index, JSType.toInt32(value), strict);
 221         } else if (value == ScriptRuntime.UNDEFINED) {
 222             return new UndefinedArrayFilter(this).set(index, value, strict);
 223         }
 224 
 225         final ArrayData newData = convert(value == null ? Object.class : value.getClass());
 226         return newData.set(index, value, strict);
 227     }
 228 
 229     @Override
 230     public ArrayData set(final int index, final int value, final boolean strict) {
 231         array[index] = value;
 232         setLength(Math.max(index + 1, length()));
 233 
 234         return this;
 235     }
 236 
 237     @Override











 238     public ArrayData set(final int index, final double value, final boolean strict) {
 239         if (JSType.isRepresentableAsInt(value)) {
 240             array[index] = (int)(long)value;
 241             setLength(Math.max(index + 1, length()));
 242             return this;
 243         }
 244 
 245         return convert(Double.class).set(index, value, strict);
 246     }
 247 
 248     @Override
 249     public int getInt(final int index) {
 250         return array[index];
 251     }
 252 
 253     @Override
 254     public int getIntOptimistic(final int index, final int programPoint) {










 255         return array[index];
 256     }
 257 
 258     @Override
 259     public double getDouble(final int index) {
 260         return array[index];
 261     }
 262 
 263     @Override
 264     public double getDoubleOptimistic(final int index, final int programPoint) {
 265         return array[index];
 266     }
 267 
 268     @Override
 269     public Object getObject(final int index) {
 270         return array[index];
 271     }
 272 
 273     @Override
 274     public boolean has(final int index) {


< prev index next >