Mercurial Hosting > luan
comparison core/src/luan/AbstractLuanTable.java @ 284:8870840251ea
use LinkedHashMap in LuanTable to preserve order
git-svn-id: https://luan-java.googlecode.com/svn/trunk@285 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 02 Dec 2014 03:55:33 +0000 |
parents | 8afe9f2fdfec |
children | 9fb523472035 |
comparison
equal
deleted
inserted
replaced
283:b669cdaf54b7 | 284:8870840251ea |
---|---|
1 package luan; | 1 package luan; |
2 | 2 |
3 import java.util.Iterator; | 3 import java.util.Iterator; |
4 import java.util.ListIterator; | 4 import java.util.ListIterator; |
5 import java.util.Map; | 5 import java.util.Map; |
6 import java.util.HashMap; | 6 import java.util.LinkedHashMap; |
7 import java.util.List; | 7 import java.util.List; |
8 import java.util.ArrayList; | 8 import java.util.ArrayList; |
9 import java.util.Collections; | 9 import java.util.Collections; |
10 import java.util.Comparator; | 10 import java.util.Comparator; |
11 import java.util.Set; | 11 import java.util.Set; |
13 import java.util.IdentityHashMap; | 13 import java.util.IdentityHashMap; |
14 import java.util.regex.Pattern; | 14 import java.util.regex.Pattern; |
15 | 15 |
16 | 16 |
17 public abstract class AbstractLuanTable implements LuanTable { | 17 public abstract class AbstractLuanTable implements LuanTable { |
18 | |
19 protected final Map<Object,Object> newMap() { | |
20 return new LinkedHashMap<Object,Object>(); | |
21 } | |
22 | |
23 protected final Map<Object,Object> newMap(Map<Object,Object> map) { | |
24 return new LinkedHashMap<Object,Object>(map); | |
25 } | |
18 | 26 |
19 @Override public boolean isEmpty() { | 27 @Override public boolean isEmpty() { |
20 return isList() && length()==0; | 28 return isList() && length()==0; |
21 } | 29 } |
22 | 30 |
27 @Override public List<Object> asList() { | 35 @Override public List<Object> asList() { |
28 return Collections.emptyList(); | 36 return Collections.emptyList(); |
29 } | 37 } |
30 | 38 |
31 @Override public Map<Object,Object> asMap() { | 39 @Override public Map<Object,Object> asMap() { |
32 Map<Object,Object> map = new HashMap<Object,Object>(); | 40 Map<Object,Object> map = newMap(); |
33 for( Map.Entry<Object,Object> entry : this ) { | 41 for( Map.Entry<Object,Object> entry : this ) { |
34 map.put(entry.getKey(),entry.getValue()); | 42 map.put(entry.getKey(),entry.getValue()); |
35 } | 43 } |
36 return map; | 44 return map; |
37 } | 45 } |
76 @Override public void setMetatable(LuanTable metatable) { | 84 @Override public void setMetatable(LuanTable metatable) { |
77 throw new UnsupportedOperationException("can't set a metatable on a "+type()); | 85 throw new UnsupportedOperationException("can't set a metatable on a "+type()); |
78 } | 86 } |
79 | 87 |
80 @Override public LuanTable cloneTable() { | 88 @Override public LuanTable cloneTable() { |
81 return isList() ? new LuanTableImpl(new ArrayList<Object>(asList())) : new LuanTableImpl(new HashMap<Object,Object>(asMap())); | 89 return isList() ? new LuanTableImpl(new ArrayList<Object>(asList())) : new LuanTableImpl(newMap(asMap())); |
82 } | 90 } |
83 } | 91 } |