jdk/src/share/classes/java/nio/Direct-X-Buffer.java
changeset 1151 4070cecdb99d
parent 1143 645d4b930f93
child 1224 8c1bc7c5dd00
equal deleted inserted replaced
1149:1e32392ecafa 1151:4070cecdb99d
    45 #if[rw]
    45 #if[rw]
    46 
    46 
    47     // Cached unsafe-access object
    47     // Cached unsafe-access object
    48     protected static final Unsafe unsafe = Bits.unsafe();
    48     protected static final Unsafe unsafe = Bits.unsafe();
    49 
    49 
       
    50     // Cached array base offset
       
    51     private static final long arrayBaseOffset = (long)unsafe.arrayBaseOffset($type$[].class);
       
    52 
    50     // Cached unaligned-access capability
    53     // Cached unaligned-access capability
    51     protected static final boolean unaligned = Bits.unaligned();
    54     protected static final boolean unaligned = Bits.unaligned();
    52 
    55 
    53     // Base address, used in all indexing calculations
    56     // Base address, used in all indexing calculations
    54     // NOTE: moved up to Buffer.java for speed in JNI GetDirectBufferAddress
    57     // NOTE: moved up to Buffer.java for speed in JNI GetDirectBufferAddress
   240             assert (pos <= lim);
   243             assert (pos <= lim);
   241             int rem = (pos <= lim ? lim - pos : 0);
   244             int rem = (pos <= lim ? lim - pos : 0);
   242             if (length > rem)
   245             if (length > rem)
   243                 throw new BufferUnderflowException();
   246                 throw new BufferUnderflowException();
   244 
   247 
       
   248 #if[!byte]
   245             if (order() != ByteOrder.nativeOrder())
   249             if (order() != ByteOrder.nativeOrder())
   246                 Bits.copyTo$Memtype$Array(ix(pos), dst,
   250                 Bits.copyTo$Memtype$Array(ix(pos), dst,
   247                                           offset << $LG_BYTES_PER_VALUE$,
   251                                           offset << $LG_BYTES_PER_VALUE$,
   248                                           length << $LG_BYTES_PER_VALUE$);
   252                                           length << $LG_BYTES_PER_VALUE$);
   249             else
   253             else
   250                 Bits.copyToByteArray(ix(pos), dst,
   254 #end[!byte]
   251                                      offset << $LG_BYTES_PER_VALUE$,
   255                 Bits.copyToArray(ix(pos), dst, arrayBaseOffset,
   252                                      length << $LG_BYTES_PER_VALUE$);
   256                                  offset << $LG_BYTES_PER_VALUE$,
       
   257                                  length << $LG_BYTES_PER_VALUE$);
   253             position(pos + length);
   258             position(pos + length);
   254         } else {
   259         } else {
   255             super.get(dst, offset, length);
   260             super.get(dst, offset, length);
   256         }
   261         }
   257         return this;
   262         return this;
   330             assert (pos <= lim);
   335             assert (pos <= lim);
   331             int rem = (pos <= lim ? lim - pos : 0);
   336             int rem = (pos <= lim ? lim - pos : 0);
   332             if (length > rem)
   337             if (length > rem)
   333                 throw new BufferOverflowException();
   338                 throw new BufferOverflowException();
   334 
   339 
       
   340 #if[!byte]
   335             if (order() != ByteOrder.nativeOrder())
   341             if (order() != ByteOrder.nativeOrder())
   336                 Bits.copyFrom$Memtype$Array(src, offset << $LG_BYTES_PER_VALUE$,
   342                 Bits.copyFrom$Memtype$Array(src, offset << $LG_BYTES_PER_VALUE$,
   337                                             ix(pos), length << $LG_BYTES_PER_VALUE$);
   343                                             ix(pos), length << $LG_BYTES_PER_VALUE$);
   338             else
   344             else
   339                 Bits.copyFromByteArray(src, offset << $LG_BYTES_PER_VALUE$,
   345 #end[!byte]
   340                                        ix(pos), length << $LG_BYTES_PER_VALUE$);
   346                 Bits.copyFromArray(src, arrayBaseOffset, offset << $LG_BYTES_PER_VALUE$,
       
   347                                    ix(pos), length << $LG_BYTES_PER_VALUE$);
   341             position(pos + length);
   348             position(pos + length);
   342         } else {
   349         } else {
   343             super.put(src, offset, length);
   350             super.put(src, offset, length);
   344         }
   351         }
   345         return this;
   352         return this;