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 }