Advertisement
Dimension

Structure.java

Dec 10th, 2011
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.77 KB | None | 0 0
  1. package emulator.code;
  2.  
  3. import java.util.*;
  4.  
  5. import emulator.code.Code.Decl;
  6. import emulator.memory.*;
  7. import emulator.memory.Identifier.Property;
  8. import emulator.memory.Memory.Access;
  9.  
  10. public abstract class Structure {
  11.     // hash keys are fixed BigIntegers
  12.     // provide next few free indices
  13.     // scan/cleanup in background/parallel
  14.     // id table entries are on fixed offsets
  15.  
  16.     public static class Type {
  17.         // use this in code structure
  18.         // functions are static
  19.         // TODO provide function override by instance
  20.         // TODO Type as variable, package as field access
  21.  
  22.         // classes have arbitrary property access (implicit, hashmap)
  23.         // classes define mandatory fields and methods (for editor suggest)
  24.         // subclasses inherit superclass mandatory fields and methods
  25.  
  26.         public Identifier.Type typeId;
  27.         public Identifier.Type enclosingTypeId; // nested
  28.         //public Identifier.Type enclosingTypeId; // anonymous
  29.         public Structure.List.Vector extendsList = new Structure.List.Vector();
  30.         public boolean instantiable;
  31.  
  32.         public final LinkedHashMap<Identifier.Property, Decl> declList = new LinkedHashMap<Identifier.Property, Decl>();// stack contains type var/literal, NO function
  33.         public final LinkedHashMap<Identifier.Property, Decl> staticDeclList = new LinkedHashMap<Identifier.Property, Decl>();
  34.         public final LinkedHashMap<Identifier.Property, Access> codeList = new LinkedHashMap<Identifier.Property, Access>();// only code objects OR Vector of code objects (statement)
  35.         public final LinkedHashMap<Identifier.Property, Access> specialCodeList = new LinkedHashMap<Identifier.Property, Access>();
  36.         // constructor / destructor
  37.         // copy (flat, deep, custom)
  38.         public final LinkedHashMap<Identifier.Property, Access> transformCodeList = new LinkedHashMap<Identifier.Property, Access>(); // cast to object, not neccessarily subtype/supertype
  39.         public final Vector<Identifier.Property> abstractCodeList = new Vector<Identifier.Property>();
  40.  
  41.     }
  42.  
  43.     public static class TypeInstance extends Structure {
  44.         public Identifier.Type typeId;
  45.         public final Structure.HashMap data = new Structure.HashMap();// decls of all implemented classes
  46.  
  47.         public final Object[] typeId1 = new Object[]{ typeId };
  48.         public final Object[] data1 = new Object[]{ data };
  49.  
  50.         @Override
  51.         public Object[] get(Identifier.Property key) {
  52.             if("data".equals(key.name)) {
  53.                 return data1;
  54.             }
  55.             else if("type".equals(key.name)) {
  56.                 return typeId1;
  57.             }
  58.            
  59.             assert false;
  60.             return null;
  61.         }
  62.  
  63.         @Override
  64.         public void set(Identifier.Property key, Object[] value) {
  65.             assert false;
  66.         }
  67.  
  68.         @Override
  69.         public boolean containsKey(Identifier.Property key) {
  70.             assert false;
  71.             return false;
  72.         }
  73.  
  74.         @Override
  75.         public boolean containsReference(Object[] value) {
  76.             assert false;
  77.             return false;
  78.         }
  79.  
  80.         @Override
  81.         public int size() {
  82.             assert false;
  83.             return 0;
  84.         }
  85.     }
  86.  
  87.     public static abstract class List extends Structure {
  88.         // linked list, vector-array
  89.         // TODO configure unique values (hash set)
  90.  
  91.         /*public static class LinkedAVOID extends List {
  92.             public final java.util.LinkedList<Object[]> dataTable = new java.util.LinkedList<Object[]>();
  93.  
  94.             @Override
  95.             public Object[] get(Identifier.Property key) {
  96.                 assert "index".equals(key.name);
  97.                 assert key.counter >= 0 && key.counter < dataTable.size();
  98.                
  99.                 return dataTable.get(key.counter);
  100.             }
  101.  
  102.             @Override
  103.             public void set(Identifier.Property key, Object[] value) {
  104.                 assert "index".equals(key.name);
  105.                 assert key.counter >= 0 && key.counter < dataTable.size();
  106.                
  107.                 dataTable.set(key.counter, value);
  108.             }
  109.  
  110.             @Override
  111.             public boolean containsKey(Identifier.Property key) {
  112.                 assert "index".equals(key.name);
  113.                
  114.                 return key.counter >= 0 && key.counter < dataTable.size();
  115.             }
  116.  
  117.             @Override
  118.             public boolean containsValue(Object[] value) {
  119.                 return dataTable.contains(value);
  120.             }
  121.  
  122.             @Override
  123.             public int size() {
  124.                 return dataTable.size();
  125.             }
  126.         }*/
  127.  
  128.         public static class Vector extends List {
  129.             public final java.util.Vector<Object[]> dataTable = new java.util.Vector<Object[]>();
  130.             public boolean unique; // TODO use hashSet
  131.  
  132.             @Override
  133.             public Object[] get(Identifier.Property key) {
  134.                 assert "index".equals(key.name);
  135.                 assert key.counter >= 0 && key.counter < dataTable.size();
  136.                
  137.                 return dataTable.get(key.counter);
  138.             }
  139.  
  140.             @Override
  141.             public void set(Identifier.Property key, Object[] value) {
  142.                 assert "index".equals(key.name);
  143.  
  144.                 while(dataTable.size() <= key.counter)
  145.                     dataTable.add(null);
  146.                
  147.                 dataTable.set(key.counter, value);
  148.             }
  149.  
  150.             @Override
  151.             public boolean containsKey(Identifier.Property key) {
  152.                 assert "index".equals(key.name);
  153.                
  154.                 return key.counter >= 0 && key.counter < dataTable.size();
  155.             }
  156.  
  157.             @Override
  158.             public boolean containsReference(Object[] value) {
  159.                 return dataTable.contains(value);
  160.             }
  161.  
  162.             @Override
  163.             public int size() {
  164.                 return dataTable.size();
  165.             }
  166.  
  167.             @Override
  168.             public int append(Object[] value) {
  169.                 int next = dataTable.size();
  170.                 set(new Identifier.Property("index", next), value);
  171.                 return next;
  172.             }
  173.  
  174.             @Override
  175.             public void push(Object[] value) {
  176.                 dataTable.add(value);
  177.             }
  178.  
  179.             @Override
  180.             public Object[] pop() {
  181.                 return dataTable.lastElement();
  182.             }
  183.         }
  184.        
  185.         public abstract int append(Object[] value);
  186.         public abstract void push(Object[] value);// begin/end
  187.         public abstract Object[] pop();// begin/end
  188.         //public abstract boolean insert(Object[] value, Identifier.Property key);
  189.     }
  190.  
  191.     /*public static class Net extends Structure {
  192.         // use this as tree
  193.         // net is back-referenced tree
  194.        
  195.         public int nextCounter = 0;
  196.         public final LinkedHashMap<Integer, Object[]> dataTable = new LinkedHashMap<Integer, Object[]>();
  197.         public final LinkedHashMap<Integer, NetItem> itemTable = new LinkedHashMap<Integer, NetItem>();
  198.         public Identifier.Property rootItem;
  199.  
  200.         @Override
  201.         public Object[] get(Identifier.Property key) {
  202.             return dataTable.get(key.counter);
  203.         }
  204.  
  205.         @Override
  206.         public void set(Identifier.Property key, Object[] value) {
  207.             dataTable.put(key.counter, value);
  208.         }
  209.     }
  210.  
  211.     public static class NetItem {
  212.         Identifier.Property parentItemId;
  213.         public final Vector<Identifier.Property> dataIdList = new Vector<Identifier.Property>();
  214.         public final Vector<Identifier.Property> subItemIdList = new Vector<Identifier.Property>();
  215.     }*/
  216.  
  217.     public static class HashMap extends Structure {
  218.         // TODO configure linked or not
  219.         // TODO configure unique values
  220.  
  221.         public final LinkedHashMap<Identifier.Property, Object[]> dataTable = new LinkedHashMap<Identifier.Property, Object[]>();
  222.  
  223.         @Override
  224.         public Object[] get(Identifier.Property key) {
  225.             return dataTable.get(key);
  226.         }
  227.  
  228.         @Override
  229.         public void set(Identifier.Property key, Object[] value) {
  230.             dataTable.put(key, value);
  231.         }
  232.  
  233.         @Override
  234.         public boolean containsKey(Identifier.Property key) {
  235.             return dataTable.containsKey(key);
  236.         }
  237.  
  238.         @Override
  239.         public boolean containsReference(Object[] value) {
  240.             return dataTable.containsValue(value);
  241.         }
  242.  
  243.         @Override
  244.         public int size() {
  245.             return dataTable.size();
  246.         }
  247.     }
  248.  
  249.     /*public static class ConstantTable {
  250.         // internal use of strings for hashmap
  251.         // internal use of ints for vector
  252.     }*/
  253.    
  254.     public static class Difference/*<Structure>*/ extends Structure {
  255.         // store difference instead of deep copy (patch)
  256.         // TODO => integrate stack-structure in type-structure
  257.  
  258.         @Override
  259.         public Object[] get(Identifier.Property key) {
  260.             // TODO Auto-generated method stub
  261.             return null;
  262.         }
  263.  
  264.         @Override
  265.         public void set(Identifier.Property key, Object[] value) {
  266.             // TODO Auto-generated method stub
  267.            
  268.         }
  269.  
  270.         @Override
  271.         public boolean containsKey(Identifier.Property key) {
  272.             // TODO Auto-generated method stub
  273.             return false;
  274.         }
  275.  
  276.         @Override
  277.         public boolean containsReference(Object[] value) {
  278.             // TODO Auto-generated method stub
  279.             return false;
  280.         }
  281.  
  282.         @Override
  283.         public int size() {
  284.             // TODO Auto-generated method stub
  285.             return 0;
  286.         }
  287.     }
  288.  
  289.     // parameter:
  290.     // extend: inherit methods fom supertype, NO traditional override methods (specific access)
  291.     // implement: abstract methods from supertype
  292.  
  293.     // NO traditional overload methods (specific access)
  294.  
  295.     // class modifier: abstract
  296.     // function modifier:
  297.  
  298.     // field getter/setter
  299.     // class constructor/destructor
  300.     // call destructor explicitly
  301.  
  302.     //public final LinkedHashMap<Identifier.Property, Memory.StructureAccess> dataList = new LinkedHashMap<Identifier.Property, Memory.StructureAccess>();// arbitrary data (expression)
  303.     //public final LinkedHashMap<Identifier.Property, Memory.StructureAccess> codeList = new LinkedHashMap<Identifier.Property, Memory.StructureAccess>();// only code objects (statement)
  304.  
  305.     public abstract Object[] get(Identifier.Property key);
  306.     public abstract void set(Identifier.Property key, Object[] value);
  307.     public abstract boolean containsKey(Identifier.Property key);
  308.     public abstract boolean containsReference(Object[] value); // compare IDENTICAL Object[] instances, not values
  309.     //public abstract boolean containsValue(Object value);
  310.     public abstract int size();
  311.     //public abstract boolean append(Object[] value);
  312.     //public abstract boolean push(Object[] value);// begin/end
  313.     //public abstract boolean pop(Object[] value);// begin/end
  314.     //public abstract boolean insert(Object[] value, Identifier.Property key);
  315.  
  316.     //public abstract int hashId();
  317.     //public abstract int identityId();
  318.     //public abstract int equals();
  319.    
  320.     // TODO ---------------------------------
  321.     // TODO add more structure api
  322.     // TODO better integration for java-native containers, keep hw implementation and memory management in mind
  323.     // TODO USE ONLY THIS STRUCTURE API IN CODE TREE. REPLACE ALL JAVA COLLECTIONS.
  324. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement