1 /* 2 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 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 27 package jdk.incubator.foreign; 28 29 import java.nio.ByteOrder; 30 31 /** 32 * This class defines useful layout constants. Some of the constants defined in this class are explicit in both 33 * size and byte order (see {@link #BITS_64_BE}), and can therefore be used to explicitly and unambiguously specify the 34 * contents of a memory segment. Other constants make implicit byte order assumptions (see 35 * {@link #JAVA_INT}); as such, these constants make it easy to interoperate with other serialization-centric APIs, 36 * such as {@link java.nio.ByteBuffer}. 37 */ 38 public final class MemoryLayouts { 39 40 private MemoryLayouts() { 41 //just the one, please 42 } 43 44 /** 45 * A value layout constant with size of one byte, and byte order set to {@link ByteOrder#LITTLE_ENDIAN}. 46 */ 47 public static final ValueLayout BITS_8_LE = MemoryLayout.ofValueBits(8, ByteOrder.LITTLE_ENDIAN); 48 49 /** 50 * A value layout constant with size of two bytes, and byte order set to {@link ByteOrder#LITTLE_ENDIAN}. 51 */ 52 public static final ValueLayout BITS_16_LE = MemoryLayout.ofValueBits(16, ByteOrder.LITTLE_ENDIAN); 53 54 /** 55 * A value layout constant with size of four bytes, and byte order set to {@link ByteOrder#LITTLE_ENDIAN}. 56 */ 57 public static final ValueLayout BITS_32_LE = MemoryLayout.ofValueBits(32, ByteOrder.LITTLE_ENDIAN); 58 59 /** 60 * A value layout constant with size of eight bytes, and byte order set to {@link ByteOrder#LITTLE_ENDIAN}. 61 */ 62 public static final ValueLayout BITS_64_LE = MemoryLayout.ofValueBits(64, ByteOrder.LITTLE_ENDIAN); 63 64 /** 65 * A value layout constant with size of one byte, and byte order set to {@link ByteOrder#BIG_ENDIAN}. 66 */ 67 public static final ValueLayout BITS_8_BE = MemoryLayout.ofValueBits(8, ByteOrder.BIG_ENDIAN); 68 69 /** 70 * A value layout constant with size of two bytes, and byte order set to {@link ByteOrder#BIG_ENDIAN}. 71 */ 72 public static final ValueLayout BITS_16_BE = MemoryLayout.ofValueBits(16, ByteOrder.BIG_ENDIAN); 73 74 /** 75 * A value layout constant with size of four bytes, and byte order set to {@link ByteOrder#BIG_ENDIAN}. 76 */ 77 public static final ValueLayout BITS_32_BE = MemoryLayout.ofValueBits(32, ByteOrder.BIG_ENDIAN); 78 79 /** 80 * A value layout constant with size of eight bytes, and byte order set to {@link ByteOrder#BIG_ENDIAN}. 81 */ 82 public static final ValueLayout BITS_64_BE = MemoryLayout.ofValueBits(64, ByteOrder.BIG_ENDIAN); 83 84 /** 85 * A padding layout constant with size of one byte. 86 */ 87 public static final MemoryLayout PAD_8 = MemoryLayout.ofPaddingBits(8); 88 89 /** 90 * A padding layout constant with size of two bytes. 91 */ 92 public static final MemoryLayout PAD_16 = MemoryLayout.ofPaddingBits(16); 93 94 /** 95 * A padding layout constant with size of four bytes. 96 */ 97 public static final MemoryLayout PAD_32 = MemoryLayout.ofPaddingBits(32); 98 99 /** 100 * A padding layout constant with size of eight bytes. 101 */ 102 public static final MemoryLayout PAD_64 = MemoryLayout.ofPaddingBits(64); 103 104 /** 105 * A value layout constant whose size is the same as that of a Java {@code byte}, and byte order set to {@link ByteOrder#nativeOrder()}. 106 */ 107 public static final ValueLayout JAVA_BYTE = MemoryLayout.ofValueBits(8, ByteOrder.nativeOrder()); 108 109 /** 110 * A value layout constant whose size is the same as that of a Java {@code char}, and byte order set to {@link ByteOrder#nativeOrder()}. 111 */ 112 public static final ValueLayout JAVA_CHAR = MemoryLayout.ofValueBits(16, ByteOrder.nativeOrder()); 113 114 /** 115 * A value layout constant whose size is the same as that of a Java {@code short}, and byte order set to {@link ByteOrder#nativeOrder()}. 116 */ 117 public static final ValueLayout JAVA_SHORT = MemoryLayout.ofValueBits(16, ByteOrder.nativeOrder()); 118 119 /** 120 * A value layout constant whose size is the same as that of a Java {@code int}, and byte order set to {@link ByteOrder#nativeOrder()}. 121 */ 122 public static final ValueLayout JAVA_INT = MemoryLayout.ofValueBits(32, ByteOrder.nativeOrder()); 123 124 /** 125 * A value layout constant whose size is the same as that of a Java {@code long}, and byte order set to {@link ByteOrder#nativeOrder()}. 126 */ 127 public static final ValueLayout JAVA_LONG = MemoryLayout.ofValueBits(64, ByteOrder.nativeOrder()); 128 129 /** 130 * A value layout constant whose size is the same as that of a Java {@code float}, and byte order set to {@link ByteOrder#nativeOrder()}. 131 */ 132 public static final ValueLayout JAVA_FLOAT = MemoryLayout.ofValueBits(32, ByteOrder.nativeOrder()); 133 134 /** 135 * A value layout constant whose size is the same as that of a Java {@code double}, and byte order set to {@link ByteOrder#nativeOrder()}. 136 */ 137 public static final ValueLayout JAVA_DOUBLE = MemoryLayout.ofValueBits(64, ByteOrder.nativeOrder()); 138 }