From 7466e02fd992a64e33eab29a371494f84aa4ec1c Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 28 Jan 2016 17:34:51 +0100 Subject: [PATCH] Initial implementation of binary struct --- src/zutil/parser/binary/BinaryStruct.java | 19 +++++++ .../parser/binary/BinaryStructParser.java | 54 +++++++++++++++++++ test/zutil/test/BinaryStructTest.java | 35 ++++++++++++ 3 files changed, 108 insertions(+) create mode 100755 src/zutil/parser/binary/BinaryStruct.java create mode 100755 src/zutil/parser/binary/BinaryStructParser.java create mode 100755 test/zutil/test/BinaryStructTest.java diff --git a/src/zutil/parser/binary/BinaryStruct.java b/src/zutil/parser/binary/BinaryStruct.java new file mode 100755 index 0000000..94a6713 --- /dev/null +++ b/src/zutil/parser/binary/BinaryStruct.java @@ -0,0 +1,19 @@ +package zutil.parser.binary; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by ezivkoc on 2016-01-28. + */ +public interface BinaryStruct { + + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.FIELD) + @interface BinaryField{ + int index(); + int length(); + } +} diff --git a/src/zutil/parser/binary/BinaryStructParser.java b/src/zutil/parser/binary/BinaryStructParser.java new file mode 100755 index 0000000..e43f0ea --- /dev/null +++ b/src/zutil/parser/binary/BinaryStructParser.java @@ -0,0 +1,54 @@ +package zutil.parser.binary; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import zutil.parser.binary.BinaryStruct.*; + +/** + * Created by ezivkoc on 2016-01-28. + */ +public class BinaryStructParser { + + public static void parse(BinaryStruct struct, byte[] bytes) { + List structDataList = getStructDataList(struct.getClass()); + int bitIndex; + for(BinaryFieldData field : structDataList){ + + } + } + + + private static List getStructDataList(Class clazz){ + ArrayList list = new ArrayList<>(); + for (Field field : clazz.getFields()){ + if (field.isAnnotationPresent(BinaryField.class)) + list.add(new BinaryFieldData(field)); + } + Collections.sort(list); + return list; + } + + + + public static class BinaryFieldData implements Comparable { + private int index; + private int length; + private Field field; + + protected BinaryFieldData(Field f){ + field = f; + BinaryField fieldData = field.getAnnotation(BinaryField.class); + index = fieldData.index(); + length = fieldData.index(); + } + + + @Override + public int compareTo(BinaryFieldData o) { + return this.index - o.index; + } + } +} diff --git a/test/zutil/test/BinaryStructTest.java b/test/zutil/test/BinaryStructTest.java new file mode 100755 index 0000000..5781ae8 --- /dev/null +++ b/test/zutil/test/BinaryStructTest.java @@ -0,0 +1,35 @@ +package zutil.test; + +import org.junit.Test; +import zutil.parser.binary.BinaryStruct; +import zutil.parser.binary.BinaryStructParser; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.TestCase.*; + +/** + * Created by ezivkoc on 2016-01-28. + */ +public class BinaryStructTest { + interface BinaryTestStruct extends BinaryStruct{ + void assertObj(); + } + + @Test + public void basicTest(){ + BinaryTestStruct struct = new BinaryTestStruct() { + @BinaryField(index=1, length=32) + public int i1; + @BinaryField(index=2, length=32) + public int i2; + + public void assertObj(){ + assertEquals(1, i1); + assertEquals(2, i2); + } + }; + + BinaryStructParser.parse(struct, new byte[]{0,0,0,1, 0,0,0,2}); + struct.assertObj(); + } +}