| 52 | } |
| 53 | |
| 54 | static public PersistentStructMap create(Def def, ISeq keyvals){ |
| 55 | Object[] vals = new Object[def.keyslots.count()]; |
| 56 | IPersistentMap ext = PersistentHashMap.EMPTY; |
| 57 | for(; keyvals != null; keyvals = keyvals.next().next()) |
| 58 | { |
| 59 | if(keyvals.next() == null) |
| 60 | throw new IllegalArgumentException(String.format("No value supplied for key: %s", keyvals.first())); |
| 61 | Object k = keyvals.first(); |
| 62 | Object v = RT.second(keyvals); |
| 63 | Map.Entry e = def.keyslots.entryAt(k); |
| 64 | if(e != null) |
| 65 | vals[(Integer) e.getValue()] = v; |
| 66 | else |
| 67 | ext = ext.assoc(k, v); |
| 68 | } |
| 69 | return new PersistentStructMap(null, def, vals, ext); |
| 70 | } |
| 71 | |
| 72 | static public PersistentStructMap construct(Def def, ISeq valseq){ |
| 73 | Object[] vals = new Object[def.keyslots.count()]; |