RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package zephyr.plugin.core.api.internal.codeparser.codetree; 00002 00003 import java.lang.reflect.Array; 00004 00005 import zephyr.plugin.core.api.internal.codeparser.interfaces.ParentNode; 00006 import zephyr.plugin.core.api.internal.monitoring.abstracts.MonitorContainerNode; 00007 import zephyr.plugin.core.api.internal.parsing.CollectionLabelBuilder; 00008 import zephyr.plugin.core.api.monitoring.abstracts.Monitored; 00009 00010 00011 public abstract class PrimitiveArrayNode<T> extends AbstractCodeNode implements MonitorContainerNode, 00012 AbstractPrimitives { 00013 static class PrimitiveDoubleArrayNode extends PrimitiveArrayNode<double[]> { 00014 protected PrimitiveDoubleArrayNode(String label, ParentNode parent, int level, 00015 CollectionLabelBuilder collectionLabelBuilder, double[] array) { 00016 super(label, parent, level, collectionLabelBuilder, array); 00017 } 00018 00019 @Override 00020 protected Monitored createMonitored(final int i) { 00021 return new Monitored() { 00022 @Override 00023 public double monitoredValue() { 00024 return array[i]; 00025 } 00026 }; 00027 } 00028 } 00029 00030 static class PrimitiveIntegerArrayNode extends PrimitiveArrayNode<int[]> { 00031 protected PrimitiveIntegerArrayNode(String label, ParentNode parent, int level, 00032 CollectionLabelBuilder collectionLabelBuilder, int[] array) { 00033 super(label, parent, level, collectionLabelBuilder, array); 00034 } 00035 00036 @Override 00037 protected Monitored createMonitored(final int i) { 00038 return new Monitored() { 00039 @Override 00040 public double monitoredValue() { 00041 return array[i]; 00042 } 00043 }; 00044 } 00045 } 00046 00047 static class PrimitiveFloatArrayNode extends PrimitiveArrayNode<float[]> { 00048 protected PrimitiveFloatArrayNode(String label, ParentNode parent, int level, 00049 CollectionLabelBuilder collectionLabelBuilder, float[] array) { 00050 super(label, parent, level, collectionLabelBuilder, array); 00051 } 00052 00053 @Override 00054 protected Monitored createMonitored(final int i) { 00055 return new Monitored() { 00056 @Override 00057 public double monitoredValue() { 00058 return array[i]; 00059 } 00060 }; 00061 } 00062 } 00063 00064 final protected CollectionLabelBuilder collectionLabelBuilder; 00065 final protected T array; 00066 00067 protected PrimitiveArrayNode(String label, ParentNode parent, int level, 00068 CollectionLabelBuilder collectionLabelBuilder, T array) { 00069 super(label, parent, level); 00070 this.collectionLabelBuilder = collectionLabelBuilder; 00071 this.array = array; 00072 } 00073 00074 @Override 00075 public Monitored createMonitored(String label) { 00076 int index = collectionLabelBuilder.indexOf(label, size()); 00077 if (index < 0) 00078 return null; 00079 return createMonitored(index); 00080 } 00081 00082 @Override 00083 public String[] createLabels() { 00084 return collectionLabelBuilder.createLabels(size()); 00085 } 00086 00087 @Override 00088 public Monitored[] createMonitored() { 00089 Monitored[] monitored = new Monitored[size()]; 00090 for (int i = 0; i < monitored.length; i++) 00091 monitored[i] = createMonitored(i); 00092 return monitored; 00093 } 00094 00095 abstract protected Monitored createMonitored(int i); 00096 00097 @Override 00098 public int size() { 00099 return Array.getLength(array); 00100 } 00101 00102 static public PrimitiveArrayNode<?> createPrimitiveArrayNode(String label, ParentNode parent, Object array, 00103 CollectionLabelBuilder collectionLabelBuilder, int level) { 00104 if (array.getClass().getComponentType().equals(double.class)) 00105 return new PrimitiveDoubleArrayNode(label, parent, level, collectionLabelBuilder, (double[]) array); 00106 else if (array.getClass().getComponentType().equals(float.class)) 00107 return new PrimitiveFloatArrayNode(label, parent, level, collectionLabelBuilder, (float[]) array); 00108 if (array.getClass().getComponentType().equals(int.class)) 00109 return new PrimitiveIntegerArrayNode(label, parent, level, collectionLabelBuilder, (int[]) array); 00110 return null; 00111 } 00112 }