DynamicArray.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package me.hammerle.snuviscript.array;
  2. import me.hammerle.snuviscript.code.InputProvider;
  3. import me.hammerle.snuviscript.variable.Variable;
  4. import java.lang.reflect.Array;
  5. import me.hammerle.snuviscript.code.SnuviUtils;
  6. import me.hammerle.snuviscript.code.Script;
  7. import me.hammerle.snuviscript.variable.LocalVariable;
  8. public class DynamicArray extends InputProvider
  9. {
  10. protected Variable var;
  11. protected InputProvider[] input;
  12. public DynamicArray(Variable var, InputProvider[] input)
  13. {
  14. this.var = var;
  15. this.input = input;
  16. }
  17. public int getLength(Script sc)
  18. {
  19. return Array.getLength(var.getArray(sc));
  20. }
  21. public void init(Script sc) throws Exception
  22. {
  23. int[] dims = new int[input.length];
  24. for(int i = 0; i < dims.length; i++)
  25. {
  26. dims[i] = input[i].getInt(sc);
  27. }
  28. var.set(sc, Array.newInstance(Object.class, dims));
  29. }
  30. @Override
  31. public Object getArray(Script sc) throws Exception
  32. {
  33. Object ob = var.getArray(sc);
  34. for(InputProvider in : input)
  35. {
  36. ob = Array.get(ob, in.getInt(sc));
  37. }
  38. return ob;
  39. }
  40. public Object getLastArray(Script sc) throws Exception
  41. {
  42. Object ob = var.getArray(sc);
  43. int end = input.length - 1;
  44. for(int j = 0; j < end; j++)
  45. {
  46. ob = Array.get(ob, input[j].getInt(sc));
  47. }
  48. return ob;
  49. }
  50. @Override
  51. public void set(Script sc, Object o) throws Exception
  52. {
  53. Array.set(getLastArray(sc), input[input.length - 1].getInt(sc), o);
  54. }
  55. @Override
  56. public Object get(Script sc) throws Exception
  57. {
  58. return Array.get(getLastArray(sc), input[input.length - 1].getInt(sc));
  59. }
  60. @Override
  61. public double getDouble(Script sc) throws Exception
  62. {
  63. return (double) get(sc);
  64. }
  65. @Override
  66. public String getString(Script sc) throws Exception
  67. {
  68. Object last = getLastArray(sc);
  69. int index = input[input.length - 1].getInt(sc);
  70. try
  71. {
  72. return String.valueOf(Array.get(last, index));
  73. }
  74. catch(IllegalArgumentException ex)
  75. {
  76. return SnuviUtils.getArrayString(Array.get(last, index));
  77. }
  78. }
  79. @Override
  80. public String toString()
  81. {
  82. StringBuilder sb = new StringBuilder(var.getName());
  83. if(var instanceof LocalVariable)
  84. {
  85. sb.append("#");
  86. sb.append("L");
  87. }
  88. sb.append("[");
  89. for(InputProvider in : input)
  90. {
  91. sb.append(in);
  92. sb.append(", ");
  93. }
  94. if(input.length > 0)
  95. {
  96. sb.delete(sb.length() - 2, sb.length());
  97. }
  98. sb.append("]");
  99. return sb.toString();
  100. }
  101. }