Mercurial Hosting > luan
comparison src/luan/LuanTable.java @ 1333:25746915a241
merge Luan and LuanState
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 12 Feb 2019 22:33:40 -0700 |
parents | f41919741100 |
children | e0cf0d108a77 |
comparison
equal
deleted
inserted
replaced
1332:11b7e11f9ed5 | 1333:25746915a241 |
---|---|
12 import java.util.Set; | 12 import java.util.Set; |
13 import java.util.HashSet; | 13 import java.util.HashSet; |
14 | 14 |
15 | 15 |
16 public final class LuanTable implements LuanCloneable { | 16 public final class LuanTable implements LuanCloneable { |
17 private LuanState luan; | 17 private Luan luan; |
18 private Map map = null; | 18 private Map map = null; |
19 private List list = null; | 19 private List list = null; |
20 private LuanTable metatable = null; | 20 private LuanTable metatable = null; |
21 public LuanClosure closure; | 21 public LuanClosure closure; |
22 private LuanCloner cloner; | 22 private LuanCloner cloner; |
23 private String security = null; | 23 private String security = null; |
24 | 24 |
25 public LuanTable(LuanState luan) { | 25 public LuanTable(Luan luan) { |
26 this.luan = luan; | 26 this.luan = luan; |
27 } | 27 } |
28 | 28 |
29 public LuanTable(LuanState luan,List list){ | 29 public LuanTable(Luan luan,List list){ |
30 int n = list.size(); | 30 int n = list.size(); |
31 for( int i=0; i<n; i++ ) { | 31 for( int i=0; i<n; i++ ) { |
32 Object val = list.get(i); | 32 Object val = list.get(i); |
33 if( val != null ) | 33 if( val != null ) |
34 rawPut2(i+1,val); | 34 rawPut2(i+1,val); |
35 } | 35 } |
36 } | 36 } |
37 | 37 |
38 public LuanTable(LuanState luan,Map map) { | 38 public LuanTable(Luan luan,Map map) { |
39 this.luan = luan; | 39 this.luan = luan; |
40 for( Object stupid : map.entrySet() ) { | 40 for( Object stupid : map.entrySet() ) { |
41 Map.Entry entry = (Map.Entry)stupid; | 41 Map.Entry entry = (Map.Entry)stupid; |
42 Object key = entry.getKey(); | 42 Object key = entry.getKey(); |
43 Object value = entry.getValue(); | 43 Object value = entry.getValue(); |
44 if( key != null && value != null ) | 44 if( key != null && value != null ) |
45 rawPut2(key,value); | 45 rawPut2(key,value); |
46 } | 46 } |
47 } | 47 } |
48 | 48 |
49 public LuanTable(LuanState luan,Set set){ | 49 public LuanTable(Luan luan,Set set){ |
50 this.luan = luan; | 50 this.luan = luan; |
51 for( Object el : set ) { | 51 for( Object el : set ) { |
52 if( el != null ) | 52 if( el != null ) |
53 rawPut2(el,Boolean.TRUE); | 53 rawPut2(el,Boolean.TRUE); |
54 } | 54 } |
91 cloner = null; | 91 cloner = null; |
92 } | 92 } |
93 } | 93 } |
94 | 94 |
95 private void deepenClone(LuanTable clone,LuanCloner cloner) { | 95 private void deepenClone(LuanTable clone,LuanCloner cloner) { |
96 clone.luan = (LuanState)cloner.clone(luan); | 96 clone.luan = (Luan)cloner.clone(luan); |
97 if( map != null ) { | 97 if( map != null ) { |
98 Map newMap = newMap(); | 98 Map newMap = newMap(); |
99 for( Object stupid : map.entrySet() ) { | 99 for( Object stupid : map.entrySet() ) { |
100 Map.Entry entry = (Map.Entry)stupid; | 100 Map.Entry entry = (Map.Entry)stupid; |
101 newMap.put( cloner.get(entry.getKey()), cloner.get(entry.getValue()) ); | 101 newMap.put( cloner.get(entry.getKey()), cloner.get(entry.getValue()) ); |
368 | 368 |
369 private LuanFunction rawPairs() { | 369 private LuanFunction rawPairs() { |
370 return new LuanFunction() { | 370 return new LuanFunction() { |
371 final Iterator<Map.Entry> iter = rawIterator(); | 371 final Iterator<Map.Entry> iter = rawIterator(); |
372 | 372 |
373 @Override public Object[] call(LuanState luan,Object[] args) { | 373 @Override public Object[] call(Luan luan,Object[] args) { |
374 if( !iter.hasNext() ) | 374 if( !iter.hasNext() ) |
375 return LuanFunction.NOTHING; | 375 return LuanFunction.NOTHING; |
376 Map.Entry<Object,Object> entry = iter.next(); | 376 Map.Entry<Object,Object> entry = iter.next(); |
377 return new Object[]{entry.getKey(),entry.getValue()}; | 377 return new Object[]{entry.getKey(),entry.getValue()}; |
378 } | 378 } |