11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package java.lang;
27
28 import jdk.internal.misc.Unsafe;
29 import jdk.internal.vm.annotation.ForceInline;
30
31 /**
32 * Helper for string concatenation. These methods are mostly looked up with private lookups
33 * from {@link java.lang.invoke.StringConcatFactory}, and used in {@link java.lang.invoke.MethodHandle}
34 * combinators there.
35 */
36 final class StringConcatHelper {
37
38 private StringConcatHelper() {
39 // no instantiation
40 }
41
42 /**
43 * Check for overflow, throw exception on overflow.
44 *
45 * @param lengthCoder String length with coder packed into higher bits
46 * the upper word.
47 * @return the given parameter value, if valid
48 */
49 private static long checkOverflow(long lengthCoder) {
50 if ((int)lengthCoder >= 0) {
449 * Allocates an uninitialized byte array based on the length and coder information
450 * in indexCoder
451 * @param indexCoder
452 * @return the newly allocated byte array
453 */
454 @ForceInline
455 static byte[] newArray(long indexCoder) {
456 byte coder = (byte)(indexCoder >> 32);
457 int index = (int)indexCoder;
458 return (byte[]) UNSAFE.allocateUninitializedArray(byte.class, index << coder);
459 }
460
461 /**
462 * Provides the initial coder for the String.
463 * @return initial coder, adjusted into the upper half
464 */
465 static long initialCoder() {
466 return String.COMPACT_STRINGS ? LATIN1 : UTF16;
467 }
468
469 }
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package java.lang;
27
28 import jdk.internal.misc.Unsafe;
29 import jdk.internal.vm.annotation.ForceInline;
30
31 import java.lang.invoke.MethodHandle;
32 import java.lang.invoke.MethodHandles;
33 import java.lang.invoke.MethodType;
34
35 /**
36 * Helper for string concatenation. These methods are mostly looked up with private lookups
37 * from {@link java.lang.invoke.StringConcatFactory}, and used in {@link java.lang.invoke.MethodHandle}
38 * combinators there.
39 */
40 final class StringConcatHelper {
41
42 private StringConcatHelper() {
43 // no instantiation
44 }
45
46 /**
47 * Check for overflow, throw exception on overflow.
48 *
49 * @param lengthCoder String length with coder packed into higher bits
50 * the upper word.
51 * @return the given parameter value, if valid
52 */
53 private static long checkOverflow(long lengthCoder) {
54 if ((int)lengthCoder >= 0) {
453 * Allocates an uninitialized byte array based on the length and coder information
454 * in indexCoder
455 * @param indexCoder
456 * @return the newly allocated byte array
457 */
458 @ForceInline
459 static byte[] newArray(long indexCoder) {
460 byte coder = (byte)(indexCoder >> 32);
461 int index = (int)indexCoder;
462 return (byte[]) UNSAFE.allocateUninitializedArray(byte.class, index << coder);
463 }
464
465 /**
466 * Provides the initial coder for the String.
467 * @return initial coder, adjusted into the upper half
468 */
469 static long initialCoder() {
470 return String.COMPACT_STRINGS ? LATIN1 : UTF16;
471 }
472
473 static MethodHandle lookupStatic(String name, MethodType methodType) {
474 try {
475 return MethodHandles.lookup().findStatic(StringConcatHelper.class, name, methodType);
476 } catch (NoSuchMethodException|IllegalAccessException e) {
477 throw new AssertionError(e);
478 }
479 }
480
481
482 }
|