Software / code / prosody
Comparison
util/serialization.lua @ 9863:aebfd1601ae2
util.serialization: Optimize handling of last table separator
Fewer next() calls and a step towards allowing use of a different iterator.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 17 Mar 2019 20:40:01 +0100 |
| parent | 9692:affcbccc1dff |
| child | 9864:9d80e679c371 |
comparison
equal
deleted
inserted
replaced
| 9862:f5623a1b33e5 | 9863:aebfd1601ae2 |
|---|---|
| 161 | 161 |
| 162 o[l], l = tstart, l + 1; | 162 o[l], l = tstart, l + 1; |
| 163 local indent = s_rep(indentwith, d); | 163 local indent = s_rep(indentwith, d); |
| 164 local numkey = 1; | 164 local numkey = 1; |
| 165 local ktyp, vtyp; | 165 local ktyp, vtyp; |
| 166 local had_items = false; | |
| 166 for k,v in next,t do | 167 for k,v in next,t do |
| 168 had_items = true; | |
| 167 o[l], l = itemstart, l + 1; | 169 o[l], l = itemstart, l + 1; |
| 168 o[l], l = indent, l + 1; | 170 o[l], l = indent, l + 1; |
| 169 ktyp, vtyp = type(k), type(v); | 171 ktyp, vtyp = type(k), type(v); |
| 170 if k == numkey then | 172 if k == numkey then |
| 171 -- next index in array part | 173 -- next index in array part |
| 192 if vtyp == "table" then | 194 if vtyp == "table" then |
| 193 l = serialize_table(v, o, l, d+1); | 195 l = serialize_table(v, o, l, d+1); |
| 194 else | 196 else |
| 195 o[l], l = ser(v), l + 1; | 197 o[l], l = ser(v), l + 1; |
| 196 end | 198 end |
| 197 -- last item? | 199 o[l], l = itemsep, l + 1; |
| 198 if next(t, k) ~= nil then | 200 end |
| 199 o[l], l = itemsep, l + 1; | 201 if had_items then |
| 200 else | 202 o[l - 1] = itemlast; |
| 201 o[l], l = itemlast, l + 1; | |
| 202 end | |
| 203 end | |
| 204 if next(t) ~= nil then | |
| 205 o[l], l = s_rep(indentwith, d-1), l + 1; | 203 o[l], l = s_rep(indentwith, d-1), l + 1; |
| 206 end | 204 end |
| 207 o[l], l = tend, l +1; | 205 o[l], l = tend, l +1; |
| 208 | 206 |
| 209 if multirefs then | 207 if multirefs then |