src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/objects/NativeUint8ClampedArray.java

Print this page




 116             }
 117         }
 118 
 119         @Override
 120         public MethodHandle getElementSetter(final Class<?> elementType) {
 121             final MethodHandle setter = super.getElementSetter(elementType); //getContinuousElementSetter(getClass(), setElem(), elementType);
 122             if (setter != null) {
 123                 if (elementType == Object.class) {
 124                     return MH.filterArguments(setter, 2, RINT_O);
 125                 } else if (elementType == double.class) {
 126                     return MH.filterArguments(setter, 2, RINT_D);
 127                 } else if (elementType == long.class) {
 128                     return MH.filterArguments(setter, 2, CLAMP_LONG);
 129                 }
 130             }
 131             return setter;
 132         }
 133 
 134         private void setElem(final int index, final int elem) {
 135             try {

 136                 final byte clamped;
 137                 if ((elem & 0xffff_ff00) == 0) {
 138                     clamped = (byte)elem;
 139                 } else {
 140                     clamped = elem < 0 ? 0 : (byte)0xff;
 141                 }
 142                 nb.put(index, clamped);

 143             } catch (final IndexOutOfBoundsException e) {
 144                 //swallow valid array indexes. it's ok.
 145                 if (index < 0) {
 146                     throw new ClassCastException();
 147                 }
 148             }
 149         }
 150 
 151         @Override
 152         public boolean isClamped() {
 153             return true;
 154         }
 155 
 156         @Override
 157         public boolean isUnsigned() {
 158             return true;
 159         }
 160 
 161         @Override
 162         public int getInt(final int index) {
 163             return getElem(index);
 164         }
 165 
 166         @Override
 167         public int getIntOptimistic(final int index, final int programPoint) {




 116             }
 117         }
 118 
 119         @Override
 120         public MethodHandle getElementSetter(final Class<?> elementType) {
 121             final MethodHandle setter = super.getElementSetter(elementType); //getContinuousElementSetter(getClass(), setElem(), elementType);
 122             if (setter != null) {
 123                 if (elementType == Object.class) {
 124                     return MH.filterArguments(setter, 2, RINT_O);
 125                 } else if (elementType == double.class) {
 126                     return MH.filterArguments(setter, 2, RINT_D);
 127                 } else if (elementType == long.class) {
 128                     return MH.filterArguments(setter, 2, CLAMP_LONG);
 129                 }
 130             }
 131             return setter;
 132         }
 133 
 134         private void setElem(final int index, final int elem) {
 135             try {
 136                 if (index < nb.limit()) {
 137                     final byte clamped;
 138                     if ((elem & 0xffff_ff00) == 0) {
 139                         clamped = (byte) elem;
 140                     } else {
 141                         clamped = elem < 0 ? 0 : (byte) 0xff;
 142                     }
 143                     nb.put(index, clamped);
 144                 }
 145             } catch (final IndexOutOfBoundsException e) {


 146                 throw new ClassCastException();

 147             }
 148         }
 149 
 150         @Override
 151         public boolean isClamped() {
 152             return true;
 153         }
 154 
 155         @Override
 156         public boolean isUnsigned() {
 157             return true;
 158         }
 159 
 160         @Override
 161         public int getInt(final int index) {
 162             return getElem(index);
 163         }
 164 
 165         @Override
 166         public int getIntOptimistic(final int index, final int programPoint) {