Package de.jungblut.classification.tree
Class TreeCompiler
- java.lang.Object
-
- de.jungblut.classification.tree.TreeCompiler
-
- All Implemented Interfaces:
org.objectweb.asm.Opcodes
public final class TreeCompiler extends java.lang.Object implements org.objectweb.asm.OpcodesCompilation unit for the object tree structure of theDecisionTree. It uses the ASM framework to calculate bytecode from the object structure under the proxy of aAbstractTreeNode.
Nodes are compiled in the following manner:- Nominal nodes are directly compiled into switch statements, default case is a return of -1.
- Leaf nodes directly return their label.
- Numerical nodes are compiled into a single branch that compares the value of the split with a reference.
The data that needs to be stored in order to compare is put into the constant space of a class. Thus this is only limited to 2^16 entries on some JVMs. The created class is called "CompiledNode_{timestamp}_{random}" and it's
AbstractTreeNode#compileAndLoad(AbstractTreeNode)method throws an unsupported operation exception.- Author:
- thomas.jungblut
-
-
Field Summary
-
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASM5, ASM6, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V1_9
-
-
Constructor Summary
Constructors Constructor Description TreeCompiler()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static AbstractTreeNodecompileAndLoad(java.lang.String name, AbstractTreeNode node)Compiles the given node and directly loads it.static byte[]compileNode(java.lang.String name, AbstractTreeNode root)Compiles the given tree node and name into a class.static java.lang.StringgenerateClassName()static AbstractTreeNodeload(java.lang.String name, byte[] byteCode)Loads the given tree node via its name and bytecode.
-
-
-
Method Detail
-
compileAndLoad
public static AbstractTreeNode compileAndLoad(java.lang.String name, AbstractTreeNode node) throws java.lang.Exception
Compiles the given node and directly loads it.- Parameters:
name- the name of the class. Possibly generated bygenerateClassName().- Returns:
- a new compiled
AbstractTreeNode. - Throws:
java.lang.Exception
-
load
public static AbstractTreeNode load(java.lang.String name, byte[] byteCode) throws java.lang.Exception
Loads the given tree node via its name and bytecode.- Parameters:
name- the name of the class.byteCode- the byte code of the class.- Returns:
- a new
AbstractTreeNode. - Throws:
java.lang.Exception
-
compileNode
public static byte[] compileNode(java.lang.String name, AbstractTreeNode root) throws java.lang.ExceptionCompiles the given tree node and name into a class.- Parameters:
name- the name of the class.root- the treenode to compile.- Returns:
- a byte[] representing the class contents.
- Throws:
java.lang.Exception
-
generateClassName
public static java.lang.String generateClassName()
- Returns:
- generate a pseudo-unique classname using the classname prefix and the timestamp in ms, because some collisions happened, a random string is appended as well.
-
-