comparison src/luan/LuaTable.java @ 46:a443637829c1

remove LuaNumber git-svn-id: https://luan-java.googlecode.com/svn/trunk@47 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 27 Dec 2012 01:48:36 +0000
parents 57054fa43189
children 659c7139e903
comparison
equal deleted inserted replaced
45:b1b14d09fc98 46:a443637829c1
24 @Override public String toString() { 24 @Override public String toString() {
25 return "table: " + Integer.toHexString(hashCode()); 25 return "table: " + Integer.toHexString(hashCode());
26 } 26 }
27 27
28 public Object get(Object key) { 28 public Object get(Object key) {
29 if( list != null && key instanceof LuaNumber ) { 29 if( list != null ) {
30 LuaNumber ln = (LuaNumber)key; 30 Integer iT = Lua.asInteger(key);
31 int i = (int)ln.n; 31 if( iT != null ) {
32 if( i == ln.n ) { 32 int i = iT - 1;
33 i--;
34 if( i>=0 && i<list.size() ) 33 if( i>=0 && i<list.size() )
35 return list.get(i); 34 return list.get(i);
36 } 35 }
37 } 36 }
38 if( map==null ) 37 if( map==null )
39 return null; 38 return null;
40 return map.get(key); 39 return map.get(key);
41 } 40 }
42 41
43 public Object put(Object key,Object val) { 42 public Object put(Object key,Object val) {
44 if( key instanceof LuaNumber ) { 43 Integer iT = Lua.asInteger(key);
45 LuaNumber ln = (LuaNumber)key; 44 if( iT != null ) {
46 int i = (int)ln.n; 45 int i = iT - 1;
47 if( i == ln.n ) { 46 if( list == null && i == 0 )
48 i--; 47 list = new ArrayList<Object>();
49 if( list == null && i == 0 ) 48 if( list != null ) {
50 list = new ArrayList<Object>(); 49 if( i == list.size() ) {
51 if( list != null ) { 50 if( val != null ) {
52 if( i == list.size() ) { 51 list.add(val);
53 if( val != null ) { 52 if( map != null ) {
54 list.add(val); 53 while(true) {
55 if( map != null ) { 54 Object v = map.remove(Double.valueOf(list.size()+1));
56 while(true) { 55 if( v == null )
57 Object v = map.remove(LuaNumber.of(list.size()+1)); 56 break;
58 if( v == null ) 57 list.add(v);
59 break;
60 list.add(v);
61 }
62 } 58 }
63 } 59 }
64 return null; 60 }
65 } else if( i>=0 && i<list.size() ) { 61 return null;
66 Object old = list.get(i); 62 } else if( i>=0 && i<list.size() ) {
67 list.set(i,val); 63 Object old = list.get(i);
68 if( val == null && i == list.size()-1 ) { 64 list.set(i,val);
69 while( i>=0 && list.get(i)==null ) { 65 if( val == null && i == list.size()-1 ) {
70 list.remove(i--); 66 while( i>=0 && list.get(i)==null ) {
71 } 67 list.remove(i--);
72 } 68 }
73 return old;
74 } 69 }
70 return old;
75 } 71 }
76 } 72 }
77 } 73 }
78 if( map==null ) { 74 if( map==null ) {
79 map = new HashMap<Object,Object>(); 75 map = new HashMap<Object,Object>();
76 }
77 if( key instanceof Number && !(key instanceof Double) ) {
78 Number n = (Number)key;
79 key = Double.valueOf(n.doubleValue());
80 } 80 }
81 if( val == null ) { 81 if( val == null ) {
82 return map.remove(key); 82 return map.remove(key);
83 } else { 83 } else {
84 return map.put(key,val); 84 return map.put(key,val);
142 return new Iterator<Map.Entry<Object,Object>>() { 142 return new Iterator<Map.Entry<Object,Object>>() {
143 public boolean hasNext() { 143 public boolean hasNext() {
144 return iter.hasNext(); 144 return iter.hasNext();
145 } 145 }
146 public Map.Entry<Object,Object> next() { 146 public Map.Entry<Object,Object> next() {
147 LuaNumber key = LuaNumber.of(iter.nextIndex()+1); 147 Double key = Double.valueOf(iter.nextIndex()+1);
148 return new MapEntry(key,iter.next()); 148 return new MapEntry(key,iter.next());
149 } 149 }
150 public void remove() { 150 public void remove() {
151 throw new UnsupportedOperationException(); 151 throw new UnsupportedOperationException();
152 } 152 }