From: <sp...@us...> - 2011-07-24 09:38:53
|
Revision: 3601 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3601&view=rev Author: spasi Date: 2011-07-24 09:38:46 +0000 (Sun, 24 Jul 2011) Log Message: ----------- @MappedType is now optional. copyTo now only copies (SIZEOF - padding) bytes. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedFloat.java trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedObjectTests3.java trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedObjectTests4.java trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedSomething.java trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedVec2.java trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedVec3.java trunk/LWJGL/src/java/org/lwjgl/test/opengl/sprites/SpriteShootoutMapped.java trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedField.java trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedObject.java trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedObjectTransformer.java trunk/LWJGL/src/java/org/lwjgl/util/mapped/Pointer.java Modified: trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedFloat.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedFloat.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedFloat.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -32,10 +32,8 @@ package org.lwjgl.test.mapped; import org.lwjgl.util.mapped.MappedObject; -import org.lwjgl.util.mapped.MappedType; /** @author Riven */ -@MappedType public class MappedFloat extends MappedObject { public MappedFloat() { Modified: trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedObjectTests3.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedObjectTests3.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedObjectTests3.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -35,7 +35,6 @@ import org.lwjgl.util.mapped.MappedObject; import org.lwjgl.util.mapped.MappedSet; import org.lwjgl.util.mapped.MappedSet2; -import org.lwjgl.util.mapped.MappedType; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -82,7 +81,6 @@ System.out.println("current.view=" + some.view + ", not " + elementCount + ", as you might expect"); } - @MappedType public static class Xyz extends MappedObject { int x, y, z; Modified: trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedObjectTests4.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedObjectTests4.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedObjectTests4.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -35,7 +35,6 @@ import org.lwjgl.PointerBuffer; import org.lwjgl.opengl.Display; import org.lwjgl.util.mapped.MappedObject; -import org.lwjgl.util.mapped.MappedType; import org.lwjgl.util.mapped.Pointer; import java.io.File; @@ -116,7 +115,6 @@ } } - @MappedType public static class MappedPointer extends MappedObject { int foo; Modified: trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedSomething.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedSomething.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedSomething.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -33,12 +33,10 @@ import org.lwjgl.util.mapped.MappedField; import org.lwjgl.util.mapped.MappedObject; -import org.lwjgl.util.mapped.MappedType; import java.nio.ByteBuffer; /** @author Riven */ -@MappedType public class MappedSomething extends MappedObject { @MappedField(byteOffset = 0) Modified: trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedVec2.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedVec2.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedVec2.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -32,10 +32,8 @@ package org.lwjgl.test.mapped; import org.lwjgl.util.mapped.MappedObject; -import org.lwjgl.util.mapped.MappedType; /** @author Riven */ -@MappedType public class MappedVec2 extends MappedObject { public float x; Modified: trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedVec3.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedVec3.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/test/mapped/MappedVec3.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -32,10 +32,8 @@ package org.lwjgl.test.mapped; import org.lwjgl.util.mapped.MappedObject; -import org.lwjgl.util.mapped.MappedType; /** @author Riven */ -@MappedType public class MappedVec3 extends MappedObject { public float x; Modified: trunk/LWJGL/src/java/org/lwjgl/test/opengl/sprites/SpriteShootoutMapped.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/test/opengl/sprites/SpriteShootoutMapped.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/test/opengl/sprites/SpriteShootoutMapped.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -204,7 +204,6 @@ return texID; } - @MappedType public static class Pixel4b extends MappedObject { public byte r, g, b, a; @@ -413,7 +412,6 @@ Display.destroy(); } - @MappedType public static class Sprite extends MappedObject { public float x, dx; @@ -421,7 +419,6 @@ } - @MappedType public static class SpriteRender extends MappedObject { public float x, y; Modified: trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedField.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedField.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedField.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -37,7 +37,7 @@ import java.lang.annotation.Target; /** - * This annotation can be used on fields of {@link MappedType} classes, + * This annotation can be used on fields of {@link MappedObject} subclasses, * to manually specify byte offsets and lengths. This is useful when the * mapped fields require custom alignment. {@link java.nio.ByteBuffer} * fields are required to have this annotation with a hardcoded byte length. Modified: trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedObject.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedObject.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedObject.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -39,8 +39,8 @@ /** * Base superclass of all mapped objects. Classes that require - * data mapping should extend this class and also be annotated - * with {@link MappedType}. + * data mapping should extend this class and registered with + * {@link MappedObjectTransformer#register(Class)}. * <p/> * Subclasses may only specify the default constructor. Any code * inside that constructor is optional, but will not run when the @@ -215,7 +215,7 @@ } /** - * Copies and amount of <code>SIZEOF</code> bytes, from the current + * Copies and amount of <code>SIZEOF - padding</code> bytes, from the current * mapped object, to the specified mapped object. */ @SuppressWarnings("unused") @@ -225,8 +225,9 @@ } /** - * Copies and amount of <code>SIZEOF*instances<c/ode> bytes, from the - * current mapped object, to the specified mapped object. + * Copies and amount of <code>SIZEOF * instances</code> bytes, from the + * current mapped object, to the specified mapped object. Note that + * this includes any padding bytes that are part of SIZEOF. */ @SuppressWarnings("unused") public final <T extends MappedObject> void copyRange(T target, int instances) { Modified: trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedObjectTransformer.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedObjectTransformer.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/util/mapped/MappedObjectTransformer.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -113,7 +113,7 @@ // => IADD // => PUTFIELD MyMappedType.view // - className_to_subtype.put(MAPPED_OBJECT_JVM, new MappedSubtypeInfo(MAPPED_OBJECT_JVM, null, -1, -1)); + className_to_subtype.put(MAPPED_OBJECT_JVM, new MappedSubtypeInfo(MAPPED_OBJECT_JVM, null, -1, -1, -1)); } final String vmName = System.getProperty("java.vm.name"); @@ -128,15 +128,13 @@ * * @param type the mapped object class. */ - public static void register(Class<?> type) { + public static void register(Class<? extends MappedObject> type) { if ( MappedObjectClassLoader.FORKED ) return; final MappedType mapped = type.getAnnotation(MappedType.class); - if ( mapped == null ) - throw new ClassFormatError("missing " + MappedType.class.getName() + " annotation"); - if ( mapped.padding() < 0 ) + if ( mapped != null && mapped.padding() < 0 ) throw new ClassFormatError("Invalid mapped type padding: " + mapped.padding()); if ( type.getEnclosingClass() != null && !Modifier.isStatic(type.getModifiers()) ) @@ -148,7 +146,7 @@ int advancingOffset = 0; long sizeof = 0; for ( Field field : type.getDeclaredFields() ) { - FieldInfo fieldInfo = registerField(mapped, className, advancingOffset, field); + FieldInfo fieldInfo = registerField(mapped == null || mapped.autoGenerateOffsets(), className, advancingOffset, field); if ( fieldInfo == null ) continue; @@ -158,14 +156,17 @@ sizeof = Math.max(sizeof, fieldInfo.offset + fieldInfo.length); } - sizeof += mapped.padding(); + final int align = mapped == null ? 4 : mapped.align(); + final int padding = mapped == null ? 0 : mapped.padding(); - final MappedSubtypeInfo mappedType = new MappedSubtypeInfo(className, fields, (int)sizeof, mapped.align()); + sizeof += padding; + + final MappedSubtypeInfo mappedType = new MappedSubtypeInfo(className, fields, (int)sizeof, align, padding); if ( className_to_subtype.put(className, mappedType) != null ) throw new InternalError("duplicate mapped type: " + mappedType.className); } - private static FieldInfo registerField(final MappedType mapped, final String className, int advancingOffset, final Field field) { + private static FieldInfo registerField(final boolean autoGenerateOffsets, final String className, int advancingOffset, final Field field) { if ( Modifier.isStatic(field.getModifiers()) ) // static fields are never mapped return null; @@ -174,7 +175,7 @@ throw new ClassFormatError("field '" + className + "." + field.getName() + "' not supported: " + field.getType()); MappedField meta = field.getAnnotation(MappedField.class); - if ( meta == null && !mapped.autoGenerateOffsets() ) + if ( meta == null && !autoGenerateOffsets ) throw new ClassFormatError("field '" + className + "." + field.getName() + "' missing annotation " + MappedField.class.getName() + ": " + className); Pointer pointer = field.getAnnotation(Pointer.class); @@ -688,7 +689,7 @@ final InsnList list = new InsnList(); // stack: target, this - list.add(getIntNode(mappedType.sizeof)); + list.add(getIntNode(mappedType.sizeof - mappedType.padding)); // stack: sizeof, target, this list.add(new MethodInsnNode(INVOKESTATIC, MAPPED_HELPER_JVM, "copy", "(L" + MAPPED_OBJECT_JVM + ";L" + MAPPED_OBJECT_JVM + ";I)V")); // stack: - @@ -1073,10 +1074,11 @@ final int sizeof; final int sizeof_shift; final int align; + final int padding; final Map<String, FieldInfo> fields; - MappedSubtypeInfo(String className, Map<String, FieldInfo> fields, int sizeof, int align) { + MappedSubtypeInfo(String className, Map<String, FieldInfo> fields, int sizeof, int align, int padding) { this.className = className; this.sizeof = sizeof; @@ -1085,6 +1087,7 @@ else this.sizeof_shift = 0; this.align = align; + this.padding = padding; this.fields = fields; } Modified: trunk/LWJGL/src/java/org/lwjgl/util/mapped/Pointer.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/util/mapped/Pointer.java 2011-07-23 22:28:57 UTC (rev 3600) +++ trunk/LWJGL/src/java/org/lwjgl/util/mapped/Pointer.java 2011-07-24 09:38:46 UTC (rev 3601) @@ -37,7 +37,7 @@ import java.lang.annotation.Target; /** - * This annotation can be used on long fields of {@link MappedType} classes, + * This annotation can be used on long fields of {@link MappedObject} subclasses, * to specify that the long value should be interpreted as a pointer. This * will determine the actual byte size of the field at runtime (4 or 8 bytes). * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |