< prev index next >

src/java.base/share/classes/java/nio/X-Buffer.java.template

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 1867,1883 **** return this; } /** * Returns the memory address, pointing to the byte at the given index, ! * modulus the given unit size. * ! * <p> A return value greater than zero indicates the address of the byte at ! * the index is misaligned for the unit size, and the value's quantity ! * indicates how much the index should be rounded up or down to locate a ! * byte at an aligned address. Otherwise, a value of {@code 0} indicates ! * that the address of the byte at the index is aligned for the unit size. * * @apiNote * This method may be utilized to determine if unit size bytes from an * index can be accessed atomically, if supported by the native platform. * --- 1867,1895 ---- return this; } /** * Returns the memory address, pointing to the byte at the given index, ! * modulo the given unit size. * ! * <p> The return value is non-negative, with {@code 0} indicating that the ! * address of the byte at the index is aligned for the unit size, and a ! * positive value that the address is misaligned for the unit size. If the ! * address of the byte at the index is misaligned, the return value ! * represents how much the index should be adjusted to locate a byte at an ! * aligned address. Specifically, the index should either be decremented by ! * the return value, or incremented by the unit size minus the return value. ! * Therefore given ! * <blockquote><pre> ! * int value = alignmentOffset(index, unitSize)</pre></blockquote> ! * then the identities ! * <blockquote><pre> ! * alignmentOffset(index - value, unitSize) == 0</pre></blockquote> ! * and ! * <blockquote><pre> ! * alignmentOffset(index + (unitSize - value), unitSize) == 0</pre></blockquote> ! * must hold. * * @apiNote * This method may be utilized to determine if unit size bytes from an * index can be accessed atomically, if supported by the native platform. *
*** 1890,1900 **** * upper bounds check is performed * * @param unitSize * The unit size in bytes, must be a power of {@code 2} * ! * @return The indexed byte's memory address modulus the unit size * * @throws IllegalArgumentException * If the index is negative or the unit size is not a power of * {@code 2} * --- 1902,1912 ---- * upper bounds check is performed * * @param unitSize * The unit size in bytes, must be a power of {@code 2} * ! * @return The indexed byte's memory address modulo the unit size * * @throws IllegalArgumentException * If the index is negative or the unit size is not a power of * {@code 2} *
*** 1916,1926 **** if (unitSize < 1 || (unitSize & (unitSize - 1)) != 0) throw new IllegalArgumentException("Unit size not a power of two: " + unitSize); if (unitSize > 8 && !isDirect()) throw new UnsupportedOperationException("Unit size unsupported for non-direct buffers: " + unitSize); ! return (int) ((address + index) % unitSize); } /** * Creates a new byte buffer whose content is a shared and aligned * subsequence of this buffer's content. --- 1928,1938 ---- if (unitSize < 1 || (unitSize & (unitSize - 1)) != 0) throw new IllegalArgumentException("Unit size not a power of two: " + unitSize); if (unitSize > 8 && !isDirect()) throw new UnsupportedOperationException("Unit size unsupported for non-direct buffers: " + unitSize); ! return (int) ((address + index) & (unitSize - 1)); } /** * Creates a new byte buffer whose content is a shared and aligned * subsequence of this buffer's content.
< prev index next >