From 7db9df61142694965b50f2e0553d4c9e5668439b Mon Sep 17 00:00:00 2001
From: Sven Gothel
+ * {@code little-endian} / {@code big/endian} description is left,
+ * allowing re-using instances in {@link MachineDataInfo.StaticConfig StaticConfig}.
+ * Use {@link {@link PlatformPropsImpl#LITTLE_ENDIAN}.
+ *
+ * Further more, the value {@ MachineDataInfo#pageSizeInBytes} shall be ignored
+ * in {@link MachineDataInfo.StaticConfig StaticConfig}, see {@link MachineDataInfo#compatible(MachineDataInfo)}.
+ *
+ * The value {@link MachineDataInfo#pageSizeInBytes} shall be ignored
+ * for static instances!
+ *
+ * If changing this table, you need to:
+ *
+ *
+ * .. b/c the generated code for glued structures must reflect this change!
+ *
MachineDataInfo
are considered equal if all components
+ * match but {@link #runtimeValidated}, {@link #isRuntimeValidated()}.
+ * @return true
if the two MachineDataInfo are equal;
+ * otherwise false
.
+ */
+ @Override
+ public final boolean equals(final Object obj) {
+ if (this == obj) { return true; }
+ if ( !(obj instanceof MachineDataInfo) ) { return false; }
+ final MachineDataInfo md = (MachineDataInfo) obj;
+
+ return pageSizeInBytes == md.pageSizeInBytes &&
+ compatible(md);
+ }
+
+ /**
+ * Checks whether two {@link MachineDataInfo} objects are equal.
+ * + * Two {@link MachineDataInfo} instances are considered equal if all components + * match but {@link #isRuntimeValidated()} and {@link #pageSizeInBytes()}. + *
+ * @returntrue
if the two {@link MachineDataInfo} are equal;
+ * otherwise false
.
+ */
+ public final boolean compatible(final MachineDataInfo md) {
+ return intSizeInBytes == md.intSizeInBytes &&
+ longSizeInBytes == md.longSizeInBytes &&
+ floatSizeInBytes == md.floatSizeInBytes &&
+ doubleSizeInBytes == md.doubleSizeInBytes &&
+ ldoubleSizeInBytes == md.ldoubleSizeInBytes &&
+ pointerSizeInBytes == md.pointerSizeInBytes &&
+
+ int8AlignmentInBytes == md.int8AlignmentInBytes &&
+ int16AlignmentInBytes == md.int16AlignmentInBytes &&
+ int32AlignmentInBytes == md.int32AlignmentInBytes &&
+ int64AlignmentInBytes == md.int64AlignmentInBytes &&
+ intAlignmentInBytes == md.intAlignmentInBytes &&
+ longAlignmentInBytes == md.longAlignmentInBytes &&
+ floatAlignmentInBytes == md.floatAlignmentInBytes &&
+ doubleAlignmentInBytes == md.doubleAlignmentInBytes &&
+ ldoubleAlignmentInBytes == md.ldoubleAlignmentInBytes &&
+ pointerAlignmentInBytes == md.pointerAlignmentInBytes ;
+ }
+
+ public StringBuilder toString(StringBuilder sb) {
+ if(null==sb) {
+ sb = new StringBuilder();
+ }
+ sb.append("MachineDataInfo: runtimeValidated ").append(isRuntimeValidated()).append(", 32Bit ").append(4 == pointerAlignmentInBytes).append(", primitive size / alignment:").append(PlatformPropsImpl.NEWLINE);
+ sb.append(" int8 ").append(int8SizeInBytes) .append(" / ").append(int8AlignmentInBytes);
+ sb.append(", int16 ").append(int16SizeInBytes) .append(" / ").append(int16AlignmentInBytes).append(Platform.getNewline());
+ sb.append(" int ").append(intSizeInBytes) .append(" / ").append(intAlignmentInBytes);
+ sb.append(", long ").append(longSizeInBytes) .append(" / ").append(longAlignmentInBytes).append(Platform.getNewline());
+ sb.append(" int32 ").append(int32SizeInBytes) .append(" / ").append(int32AlignmentInBytes);
+ sb.append(", int64 ").append(int64SizeInBytes) .append(" / ").append(int64AlignmentInBytes).append(Platform.getNewline());
+ sb.append(" float ").append(floatSizeInBytes) .append(" / ").append(floatAlignmentInBytes);
+ sb.append(", double ").append(doubleSizeInBytes) .append(" / ").append(doubleAlignmentInBytes);
+ sb.append(", ldouble ").append(ldoubleSizeInBytes).append(" / ").append(ldoubleAlignmentInBytes).append(Platform.getNewline());
+ sb.append(" pointer ").append(pointerSizeInBytes).append(" / ").append(pointerAlignmentInBytes);
+ sb.append(", page ").append(pageSizeInBytes);
+ return sb;
+ }
+
+ @Override
+ public String toString() {
+ return toString(null).toString();
+ }
+
+}
diff --git a/src/java/com/jogamp/common/os/MachineDescription.java b/src/java/com/jogamp/common/os/MachineDescription.java
deleted file mode 100644
index 2a4627e..0000000
--- a/src/java/com/jogamp/common/os/MachineDescription.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
- * Copyright (c) 2010 JogAmp Community. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * - Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * Neither the name of Sun Microsystems, Inc. or the names of
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * This software is provided "AS IS," without a warranty of any kind. ALL
- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
- * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
- * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
- * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
- * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
- * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
- * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
- * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
- * You acknowledge that this software is not designed or intended for use
- * in the design, construction, operation or maintenance of any nuclear
- * facility.
- *
- * Sun gratefully acknowledges that this software was originally authored
- * and developed by Kenneth Bradley Russell and Christopher John Kline.
- */
-
-package com.jogamp.common.os;
-
-import jogamp.common.os.PlatformPropsImpl;
-
-/**
- * For alignment and size see {@link com.jogamp.gluegen}
- */
-public class MachineDescription {
- /* arch os int, long, float, doubl, ldoubl, ptr, page */
- private final static int[] size_armeabi = { 4, 4, 4, 8, 8, 4, 4096 };
- private final static int[] size_x86_32_unix = { 4, 4, 4, 8, 12, 4, 4096 };
- private final static int[] size_x86_32_macos = { 4, 4, 4, 8, 16, 4, 4096 };
- private final static int[] size_x86_32_windows = { 4, 4, 4, 8, 12, 4, 4096 };
- private final static int[] size_lp64_unix = { 4, 8, 4, 8, 16, 8, 4096 };
- private final static int[] size_x86_64_windows = { 4, 4, 4, 8, 16, 8, 4096 };
- private final static int[] size_sparc_32_sunos = { 4, 4, 4, 8, 16, 4, 8192 };
-
- /* arch os i8, i16, i32, i64, int, long, float, doubl, ldoubl, ptr */
- private final static int[] align_armeabi = { 1, 2, 4, 8, 4, 4, 4, 8, 8, 4 };
- private final static int[] align_x86_32_unix = { 1, 2, 4, 4, 4, 4, 4, 4, 4, 4 };
- private final static int[] align_x86_32_macos = { 1, 2, 4, 4, 4, 4, 4, 4, 16, 4 };
- private final static int[] align_x86_32_windows = { 1, 2, 4, 8, 4, 4, 4, 8, 4, 4 };
- private final static int[] align_lp64_unix = { 1, 2, 4, 8, 4, 8, 4, 8, 16, 8 };
- private final static int[] align_x86_64_windows = { 1, 2, 4, 8, 4, 4, 4, 8, 16, 8 };
- private final static int[] align_sparc_32_sunos = { 1, 2, 4, 8, 4, 4, 4, 8, 8, 4 };
-
- public enum StaticConfig {
- /** {@link Platform.CPUType#ARM} EABI Little Endian */
- ARMle_EABI(true, size_armeabi, align_armeabi),
- /** {@link Platform.CPUType#X86_32} Little Endian Unix */
- X86_32_UNIX(true, size_x86_32_unix, align_x86_32_unix),
- /** LP64 Unix, e.g.: {@link Platform.CPUType#X86_64} Little Endian Unix, {@link Platform.CPUType#ARM64} EABI Little Endian, ... */
- LP64_UNIX(true, size_lp64_unix, align_lp64_unix),
- /** {@link Platform.CPUType#X86_32} Little Endian MacOS (Special case gcc4/OSX) */
- X86_32_MACOS(true, size_x86_32_macos, align_x86_32_macos),
- /** {@link Platform.CPUType#X86_32} Little Endian Windows */
- X86_32_WINDOWS(true, size_x86_32_windows, align_x86_32_windows),
- /** {@link Platform.CPUType#X86_64} Little Endian Windows */
- X86_64_WINDOWS(true, size_x86_64_windows, align_x86_64_windows),
- /** {@link Platform.CPUType#SPARC_32} Big Endian Solaris */
- SPARC_32_SUNOS(false, size_sparc_32_sunos, align_sparc_32_sunos);
-
- public final MachineDescription md;
-
- StaticConfig(final boolean littleEndian, final int[] sizes, final int[] alignments) {
- int i=0, j=0;
- this.md = new MachineDescription(false, littleEndian,
- sizes[i++],
- sizes[i++],
- sizes[i++],
- sizes[i++],
- sizes[i++],
- sizes[i++],
- sizes[i++],
- alignments[j++],
- alignments[j++],
- alignments[j++],
- alignments[j++],
- alignments[j++],
- alignments[j++],
- alignments[j++],
- alignments[j++],
- alignments[j++],
- alignments[j++]);
- }
-
- public final StringBuilder toString(StringBuilder sb) {
- if(null==sb) {
- sb = new StringBuilder();
- }
- sb.append("MachineDescriptionStatic: ").append(this.name()).append("(").append(this.ordinal()).append("): ");
- md.toString(sb);
- return sb;
- }
- public final String toShortString() {
- return this.name()+"("+this.ordinal()+")";
- }
- @Override
- public String toString() {
- return toString(null).toString();
- }
- }
-
-
- final private boolean runtimeValidated;
-
- final private boolean littleEndian;
-
- final private int int8SizeInBytes = 1;
- final private int int16SizeInBytes = 2;
- final private int int32SizeInBytes = 4;
- final private int int64SizeInBytes = 8;
-
- final private int intSizeInBytes;
- final private int longSizeInBytes;
- final private int floatSizeInBytes;
- final private int doubleSizeInBytes;
- final private int ldoubleSizeInBytes;
- final private int pointerSizeInBytes;
- final private int pageSizeInBytes;
-
- final private int int8AlignmentInBytes;
- final private int int16AlignmentInBytes;
- final private int int32AlignmentInBytes;
- final private int int64AlignmentInBytes;
- final private int intAlignmentInBytes;
- final private int longAlignmentInBytes;
- final private int floatAlignmentInBytes;
- final private int doubleAlignmentInBytes;
- final private int ldoubleAlignmentInBytes;
- final private int pointerAlignmentInBytes;
-
- public MachineDescription(final boolean runtimeValidated,
- final boolean littleEndian,
-
- final int intSizeInBytes,
- final int longSizeInBytes,
- final int floatSizeInBytes,
- final int doubleSizeInBytes,
- final int ldoubleSizeInBytes,
- final int pointerSizeInBytes,
- final int pageSizeInBytes,
-
- final int int8AlignmentInBytes,
- final int int16AlignmentInBytes,
- final int int32AlignmentInBytes,
- final int int64AlignmentInBytes,
- final int intAlignmentInBytes,
- final int longAlignmentInBytes,
- final int floatAlignmentInBytes,
- final int doubleAlignmentInBytes,
- final int ldoubleAlignmentInBytes,
- final int pointerAlignmentInBytes) {
- this.runtimeValidated = runtimeValidated;
- this.littleEndian = littleEndian;
-
- this.intSizeInBytes = intSizeInBytes;
- this.longSizeInBytes = longSizeInBytes;
- this.floatSizeInBytes = floatSizeInBytes;
- this.doubleSizeInBytes = doubleSizeInBytes;
- this.ldoubleSizeInBytes = ldoubleSizeInBytes;
- this.pointerSizeInBytes = pointerSizeInBytes;
- this.pageSizeInBytes = pageSizeInBytes;
-
- this.int8AlignmentInBytes = int8AlignmentInBytes;
- this.int16AlignmentInBytes = int16AlignmentInBytes;
- this.int32AlignmentInBytes = int32AlignmentInBytes;
- this.int64AlignmentInBytes = int64AlignmentInBytes;
- this.intAlignmentInBytes = intAlignmentInBytes;
- this.longAlignmentInBytes = longAlignmentInBytes;
- this.floatAlignmentInBytes = floatAlignmentInBytes;
- this.doubleAlignmentInBytes = doubleAlignmentInBytes;
- this.ldoubleAlignmentInBytes = ldoubleAlignmentInBytes;
- this.pointerAlignmentInBytes = pointerAlignmentInBytes;
- }
-
- /**
- * @return true if all values are validated at runtime, otherwise false (i.e. for static compilation w/ preset values)
- */
- public final boolean isRuntimeValidated() {
- return runtimeValidated;
- }
-
- /**
- * Returns true only if this system uses little endian byte ordering.
- */
- public final boolean isLittleEndian() {
- return littleEndian;
- }
-
- public final int intSizeInBytes() { return intSizeInBytes; }
- public final int longSizeInBytes() { return longSizeInBytes; }
- public final int int8SizeInBytes() { return int8SizeInBytes; }
- public final int int16SizeInBytes() { return int16SizeInBytes; }
- public final int int32SizeInBytes() { return int32SizeInBytes; }
- public final int int64SizeInBytes() { return int64SizeInBytes; }
- public final int floatSizeInBytes() { return floatSizeInBytes; }
- public final int doubleSizeInBytes() { return doubleSizeInBytes; }
- public final int ldoubleSizeInBytes() { return ldoubleSizeInBytes; }
- public final int pointerSizeInBytes() { return pointerSizeInBytes; }
- public final int pageSizeInBytes() { return pageSizeInBytes; }
-
- public final int intAlignmentInBytes() { return intAlignmentInBytes; }
- public final int longAlignmentInBytes() { return longAlignmentInBytes; }
- public final int int8AlignmentInBytes() { return int8AlignmentInBytes; }
- public final int int16AlignmentInBytes() { return int16AlignmentInBytes; }
- public final int int32AlignmentInBytes() { return int32AlignmentInBytes; }
- public final int int64AlignmentInBytes() { return int64AlignmentInBytes; }
- public final int floatAlignmentInBytes() { return floatAlignmentInBytes; }
- public final int doubleAlignmentInBytes() { return doubleAlignmentInBytes; }
- public final int ldoubleAlignmentInBytes() { return ldoubleAlignmentInBytes; }
- public final int pointerAlignmentInBytes() { return pointerAlignmentInBytes; }
-
- /**
- * @return number of pages required for size in bytes
- */
- public int pageCount(final int size) {
- return ( size + ( pageSizeInBytes - 1) ) / pageSizeInBytes ; // integer arithmetic
- }
-
- /**
- * @return page aligned size in bytes
- */
- public int pageAlignedSize(final int size) {
- return pageCount(size) * pageSizeInBytes;
- }
-
- /**
- * Checks whether two size objects are equal. Two instances
- * of MachineDescription
are considered equal if all components
- * match but {@link #runtimeValidated}, {@link #isRuntimeValidated()}.
- * @return true
if the two MachineDescription are equal;
- * otherwise false
.
- */
- @Override
- public final boolean equals(final Object obj) {
- if (this == obj) { return true; }
- if ( !(obj instanceof MachineDescription) ) { return false; }
- final MachineDescription md = (MachineDescription) obj;
-
- return pageSizeInBytes == md.pageSizeInBytes &&
- compatible(md);
- }
-
- /**
- * Checks whether two size objects are equal. Two instances
- * of MachineDescription
are considered equal if all components
- * match but {@link #isRuntimeValidated()} and {@link #pageSizeInBytes()}.
- * @return true
if the two MachineDescription are equal;
- * otherwise false
.
- */
- public final boolean compatible(final MachineDescription md) {
- return littleEndian == md.littleEndian &&
-
- intSizeInBytes == md.intSizeInBytes &&
- longSizeInBytes == md.longSizeInBytes &&
- floatSizeInBytes == md.floatSizeInBytes &&
- doubleSizeInBytes == md.doubleSizeInBytes &&
- ldoubleSizeInBytes == md.ldoubleSizeInBytes &&
- pointerSizeInBytes == md.pointerSizeInBytes &&
-
- int8AlignmentInBytes == md.int8AlignmentInBytes &&
- int16AlignmentInBytes == md.int16AlignmentInBytes &&
- int32AlignmentInBytes == md.int32AlignmentInBytes &&
- int64AlignmentInBytes == md.int64AlignmentInBytes &&
- intAlignmentInBytes == md.intAlignmentInBytes &&
- longAlignmentInBytes == md.longAlignmentInBytes &&
- floatAlignmentInBytes == md.floatAlignmentInBytes &&
- doubleAlignmentInBytes == md.doubleAlignmentInBytes &&
- ldoubleAlignmentInBytes == md.ldoubleAlignmentInBytes &&
- pointerAlignmentInBytes == md.pointerAlignmentInBytes ;
- }
-
- public StringBuilder toString(StringBuilder sb) {
- if(null==sb) {
- sb = new StringBuilder();
- }
- sb.append("MachineDescription: runtimeValidated ").append(isRuntimeValidated()).append(", littleEndian ").append(isLittleEndian()).append(", 32Bit ").append(4 == pointerAlignmentInBytes).append(", primitive size / alignment:").append(PlatformPropsImpl.NEWLINE);
- sb.append(" int8 ").append(int8SizeInBytes) .append(" / ").append(int8AlignmentInBytes);
- sb.append(", int16 ").append(int16SizeInBytes) .append(" / ").append(int16AlignmentInBytes).append(Platform.getNewline());
- sb.append(" int ").append(intSizeInBytes) .append(" / ").append(intAlignmentInBytes);
- sb.append(", long ").append(longSizeInBytes) .append(" / ").append(longAlignmentInBytes).append(Platform.getNewline());
- sb.append(" int32 ").append(int32SizeInBytes) .append(" / ").append(int32AlignmentInBytes);
- sb.append(", int64 ").append(int64SizeInBytes) .append(" / ").append(int64AlignmentInBytes).append(Platform.getNewline());
- sb.append(" float ").append(floatSizeInBytes) .append(" / ").append(floatAlignmentInBytes);
- sb.append(", double ").append(doubleSizeInBytes) .append(" / ").append(doubleAlignmentInBytes);
- sb.append(", ldouble ").append(ldoubleSizeInBytes).append(" / ").append(ldoubleAlignmentInBytes).append(Platform.getNewline());
- sb.append(" pointer ").append(pointerSizeInBytes).append(" / ").append(pointerAlignmentInBytes);
- sb.append(", page ").append(pageSizeInBytes);
- return sb;
- }
-
- @Override
- public String toString() {
- return toString(null).toString();
- }
-
-}
diff --git a/src/java/com/jogamp/common/os/Platform.java b/src/java/com/jogamp/common/os/Platform.java
index 6f6c99d..2e63550 100644
--- a/src/java/com/jogamp/common/os/Platform.java
+++ b/src/java/com/jogamp/common/os/Platform.java
@@ -41,7 +41,7 @@ import com.jogamp.common.util.VersionNumber;
import com.jogamp.common.util.cache.TempJarCache;
import jogamp.common.jvm.JVMUtil;
-import jogamp.common.os.MachineDescriptionRuntime;
+import jogamp.common.os.MachineDataInfoRuntime;
import jogamp.common.os.PlatformPropsImpl;
/**
@@ -50,7 +50,7 @@ import jogamp.common.os.PlatformPropsImpl;
* Some field declarations and it's static initialization has been delegated
* to it's super class {@link PlatformPropsImpl} to solve
* static initialization interdependencies w/ the GlueGen native library loading
- * and it's derived information {@link #getMachineDescription()}, {@link #is32Bit()}, ..true
if AWT is available and not in headless mode, otherwise false
. */
public static final boolean AWT_AVAILABLE;
@@ -320,19 +333,11 @@ public class Platform extends PlatformPropsImpl {
USE_TEMP_JAR_CACHE = _USE_TEMP_JAR_CACHE[0];
AWT_AVAILABLE = _AWT_AVAILABLE[0];
- final MachineDescription.StaticConfig smd = MachineDescriptionRuntime.getStatic();
- MachineDescription md = MachineDescriptionRuntime.getRuntime();
- if(null == md) {
- md = smd.md;
- System.err.println("Warning: Using static MachineDescription: "+smd);
- } else {
- if(!md.compatible(smd.md)) {
- throw new RuntimeException("Incompatible MachineDescriptions:"+PlatformPropsImpl.NEWLINE+
- " Static "+smd+PlatformPropsImpl.NEWLINE+
- " Runtime "+md);
- }
- }
- machineDescription = md;
+ //
+ // Validate and setup MachineDataInfo.StaticConfig
+ //
+ MachineDataInfoRuntime.initialize();
+ machineDescription = MachineDataInfoRuntime.getRuntime();
}
private Platform() {}
@@ -496,9 +501,9 @@ public class Platform extends PlatformPropsImpl {
}
/**
- * Returns the MachineDescription of the running machine.
+ * Returns the MachineDataInfo of the running machine.
*/
- public static MachineDescription getMachineDescription() {
+ public static MachineDataInfo getMachineDataInfo() {
return machineDescription;
}
diff --git a/src/java/com/jogamp/common/util/IOUtil.java b/src/java/com/jogamp/common/util/IOUtil.java
index 1fd7cbf..c773b21 100644
--- a/src/java/com/jogamp/common/util/IOUtil.java
+++ b/src/java/com/jogamp/common/util/IOUtil.java
@@ -54,7 +54,7 @@ import jogamp.common.os.PlatformPropsImpl;
import com.jogamp.common.net.AssetURLContext;
import com.jogamp.common.net.Uri;
import com.jogamp.common.nio.Buffers;
-import com.jogamp.common.os.MachineDescription;
+import com.jogamp.common.os.MachineDataInfo;
import com.jogamp.common.os.Platform;
public class IOUtil {
@@ -160,14 +160,14 @@ public class IOUtil {
* @throws IOException
*/
public static int copyStream2Stream(final InputStream in, final OutputStream out, final int totalNumBytes) throws IOException {
- return copyStream2Stream(Platform.getMachineDescription().pageSizeInBytes(), in, out, totalNumBytes);
+ return copyStream2Stream(Platform.getMachineDataInfo().pageSizeInBytes(), in, out, totalNumBytes);
}
/**
* Copy the specified input stream to the specified output stream. The total
* number of bytes written is returned.
*
- * @param bufferSize the intermediate buffer size, should be {@link MachineDescription#pageSizeInBytes()} for best performance.
+ * @param bufferSize the intermediate buffer size, should be {@link MachineDataInfo#pageSizeInBytes()} for best performance.
* @param in the source
* @param out the destination
* @param totalNumBytes informal number of expected bytes, maybe used for user feedback while processing. -1 if unknown
@@ -246,7 +246,7 @@ public class IOUtil {
if( initialCapacity < avail ) {
initialCapacity = avail;
}
- final MachineDescription machine = Platform.getMachineDescription();
+ final MachineDataInfo machine = Platform.getMachineDataInfo();
ByteBuffer data = Buffers.newDirectByteBuffer( machine.pageAlignedSize( initialCapacity ) );
final byte[] chunk = new byte[machine.pageSizeInBytes()];
int chunk2Read = Math.min(machine.pageSizeInBytes(), avail);
diff --git a/src/java/com/jogamp/common/util/VersionUtil.java b/src/java/com/jogamp/common/util/VersionUtil.java
index aef3fc2..6fec8fa 100644
--- a/src/java/com/jogamp/common/util/VersionUtil.java
+++ b/src/java/com/jogamp/common/util/VersionUtil.java
@@ -59,7 +59,7 @@ public class VersionUtil {
// environment
sb.append("Platform: ").append(Platform.getOSType()).append(" / ").append(Platform.getOSName()).append(' ').append(Platform.getOSVersion()).append(" (").append(Platform.getOSVersionNumber()).append("), ");
sb.append(Platform.getArchName()).append(" (").append(Platform.getCPUType()).append(", ").append(Platform.getABIType()).append("), ");
- sb.append(Runtime.getRuntime().availableProcessors()).append(" cores");
+ sb.append(Runtime.getRuntime().availableProcessors()).append(" cores, ").append("littleEndian ").append(PlatformPropsImpl.LITTLE_ENDIAN);
sb.append(Platform.getNewline());
if( Platform.OSType.ANDROID == PlatformPropsImpl.OS_TYPE ) {
sb.append("Platform: Android Version: ").append(AndroidVersion.CODENAME).append(", ");
@@ -67,7 +67,7 @@ public class VersionUtil {
sb.append(Platform.getNewline());
}
- Platform.getMachineDescription().toString(sb).append(Platform.getNewline());
+ Platform.getMachineDataInfo().toString(sb).append(Platform.getNewline());
// JVM/JRE
sb.append("Platform: Java Version: ").append(Platform.getJavaVersion()).append(" (").append(Platform.getJavaVersionNumber()).append("u").append(PlatformPropsImpl.JAVA_VERSION_UPDATE).append("), VM: ").append(Platform.getJavaVMName());
diff --git a/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java b/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java
index 5673aac..93a1ecc 100644
--- a/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java
+++ b/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java
@@ -43,7 +43,7 @@ import java.util.*;
import java.io.*;
import java.text.MessageFormat;
-import com.jogamp.common.os.MachineDescription;
+import com.jogamp.common.os.MachineDataInfo;
import com.jogamp.gluegen.cgram.types.*;
import java.util.logging.Logger;
@@ -109,7 +109,7 @@ public class CMethodBindingEmitter extends FunctionEmitter {
protected static final String STRING_CHARS_PREFIX = "_strchars_";
// We need this in order to compute sizes of certain types
- protected MachineDescription machDesc;
+ protected MachineDataInfo machDesc;
/**
* Constructs an emitter for the specified binding, and sets a default
@@ -124,7 +124,7 @@ public class CMethodBindingEmitter extends FunctionEmitter {
final boolean isJavaMethodStatic,
final boolean forImplementingMethodCall,
final boolean forIndirectBufferAndArrayImplementation,
- final MachineDescription machDesc)
+ final MachineDataInfo machDesc)
{
super(output, false);
@@ -289,7 +289,7 @@ public class CMethodBindingEmitter extends FunctionEmitter {
/**
* Used for certain internal type size computations
*/
- public final MachineDescription getMachineDescription() { return machDesc; }
+ public final MachineDataInfo getMachineDataInfo() { return machDesc; }
@Override
diff --git a/src/java/com/jogamp/gluegen/JavaConfiguration.java b/src/java/com/jogamp/gluegen/JavaConfiguration.java
index 3924ec2..346920d 100644
--- a/src/java/com/jogamp/gluegen/JavaConfiguration.java
+++ b/src/java/com/jogamp/gluegen/JavaConfiguration.java
@@ -54,7 +54,7 @@ import com.jogamp.gluegen.cgram.types.*;
import java.util.logging.Logger;
-import jogamp.common.os.MachineDescriptionRuntime;
+import jogamp.common.os.MachineDataInfoRuntime;
import static java.util.logging.Level.*;
import static com.jogamp.gluegen.JavaEmitter.MethodAccess.*;
import static com.jogamp.gluegen.JavaEmitter.EmissionStyle.*;
@@ -166,7 +166,7 @@ public class JavaConfiguration {
private final Map* If undefined, code generation uses the default expression: *
- * private static final int mdIdx = MachineDescriptionRuntime.getStatic().ordinal(); + * private static final int mdIdx = MachineDataInfoRuntime.getStatic().ordinal(); ** */ - public String returnStructMachineDescriptorIndex(final String structName) { - return structMachineDescriptorIndex.get(structName); + public String returnStructMachineDataInfoIndex(final String structName) { + return structMachineDataInfoIndex.get(structName); } /** @@ -1123,8 +1123,8 @@ public class JavaConfiguration { readTemporaryCVariableAssignment(tok, filename, lineNo); // Warning: make sure delimiters are reset at the top of this loop // because TemporaryCVariableAssignment changes them. - } else if (cmd.equalsIgnoreCase("StructMachineDescriptorIndex")) { - readStructMachineDescriptorIndex(tok, filename, lineNo); + } else if (cmd.equalsIgnoreCase("StructMachineDataInfoIndex")) { + readStructMachineDataInfoIndex(tok, filename, lineNo); // Warning: make sure delimiters are reset at the top of this loop // because StructMachineDescriptorIndex changes them. } else if (cmd.equalsIgnoreCase("ReturnValueCapacity")) { @@ -1525,14 +1525,14 @@ public class JavaConfiguration { } } - protected void readStructMachineDescriptorIndex(final StringTokenizer tok, final String filename, final int lineNo) { + protected void readStructMachineDataInfoIndex(final StringTokenizer tok, final String filename, final int lineNo) { try { final String structName = tok.nextToken(); String restOfLine = tok.nextToken("\n\r\f"); restOfLine = restOfLine.trim(); - structMachineDescriptorIndex.put(structName, restOfLine); + structMachineDataInfoIndex.put(structName, restOfLine); } catch (final NoSuchElementException e) { - throw new RuntimeException("Error parsing \"StructMachineDescriptorIndex\" command at line " + lineNo + + throw new RuntimeException("Error parsing \"StructMachineDataInfoIndex\" command at line " + lineNo + " in file \"" + filename + "\"", e); } } diff --git a/src/java/com/jogamp/gluegen/JavaEmitter.java b/src/java/com/jogamp/gluegen/JavaEmitter.java index 48c7047..d2dc4ba 100644 --- a/src/java/com/jogamp/gluegen/JavaEmitter.java +++ b/src/java/com/jogamp/gluegen/JavaEmitter.java @@ -42,7 +42,7 @@ package com.jogamp.gluegen; import com.jogamp.common.nio.Buffers; import com.jogamp.common.os.DynamicLookupHelper; -import com.jogamp.common.os.MachineDescription; +import com.jogamp.common.os.MachineDataInfo; import java.io.*; import java.util.*; @@ -53,7 +53,7 @@ import com.jogamp.gluegen.cgram.types.*; import java.nio.Buffer; import java.util.logging.Logger; -import jogamp.common.os.MachineDescriptionRuntime; +import jogamp.common.os.MachineDataInfoRuntime; import static java.util.logging.Level.*; import static com.jogamp.gluegen.JavaEmitter.MethodAccess.*; @@ -100,8 +100,8 @@ public class JavaEmitter implements GlueEmitter { private PrintWriter javaWriter; // Emits either interface or, in AllStatic mode, everything private PrintWriter javaImplWriter; // Only used in non-AllStatic modes for impl class private PrintWriter cWriter; - private final MachineDescription machDescJava = MachineDescription.StaticConfig.LP64_UNIX.md; - private final MachineDescription.StaticConfig[] machDescTargetConfigs = MachineDescription.StaticConfig.values(); + private final MachineDataInfo machDescJava = MachineDataInfo.StaticConfig.LP64_UNIX.md; + private final MachineDataInfo.StaticConfig[] machDescTargetConfigs = MachineDataInfo.StaticConfig.values(); protected final static Logger LOG = Logger.getLogger(JavaEmitter.class.getPackage().getName()); @@ -858,7 +858,7 @@ public class JavaEmitter implements GlueEmitter { this.requiresStaticInitialization = false; // reset - // machDescJava global MachineDescription is the one used to determine + // machDescJava global MachineDataInfo is the one used to determine // the sizes of the primitive types seen in the public API in Java. // For example, if a C long is an element of a struct, it is the size // of a Java int on a 32-bit machine but the size of a Java long @@ -868,11 +868,11 @@ public class JavaEmitter implements GlueEmitter { // implementation on a 32-bit platform must downcast this to an // int and set only an int's worth of data in the struct. // - // The machDescTarget MachineDescription is the one used to determine how + // The machDescTarget MachineDataInfo is the one used to determine how // much data to set in or get from the struct and exactly from // where it comes. // - // Note that machDescJava MachineDescription is always 64bit unix, + // Note that machDescJava MachineDataInfo is always 64bit unix, // which complies w/ Java types. boolean needsNativeCode = false; @@ -935,7 +935,7 @@ public class JavaEmitter implements GlueEmitter { javaWriter.println("import " + cfg.gluegenRuntimePackage() + ".*;"); javaWriter.println("import " + DynamicLookupHelper.class.getPackage().getName() + ".*;"); javaWriter.println("import " + Buffers.class.getPackage().getName() + ".*;"); - javaWriter.println("import " + MachineDescriptionRuntime.class.getName() + ";"); + javaWriter.println("import " + MachineDataInfoRuntime.class.getName() + ";"); javaWriter.println(); final List
remainder = offset % alignment- since alignment is a multiple of 2
-> x % 2n == x & (2n - 1)
remainder = offset & ( alignment - 1 )+ Modulo operation, where the 2nd handles the case offset == alignment:
- padding = (remainder > 0) ? alignment - remainder : 0 ;+ Optimization utilizing alignment as a multiple of 2
+ padding = ( alignment - ( offset % alignment ) ) % alignment ;
+ aligned_offset = offset + padding ; +
-> x % 2n == x & ( 2n - 1 )
+ remainder = offset & ( alignment - 1 ) ;+ Without branching, using the 2nd modulo operation for the case offset == alignment: +
+ padding = ( remainder > 0 ) ? alignment - remainder : 0 ;
+ aligned_offset = offset + padding ; +
+ padding = ( alignment - ( offset & ( alignment - 1 ) ) ) & ( alignment - 1 ) ;+ See
aligned_offset = offset + padding ;
com.jogamp.gluegen.cgram.types.SizeThunk.align(..)
.