| 274 | } |
| 275 | |
| 276 | func (r *postMapReader) nextId() bool { |
| 277 | for r.count > 0 { |
| 278 | r.count-- |
| 279 | delta64, n := binary.Uvarint(r.d) |
| 280 | delta := uint32(delta64) |
| 281 | if n <= 0 || delta == 0 { |
| 282 | corrupt() |
| 283 | } |
| 284 | r.d = r.d[n:] |
| 285 | r.oldid += delta |
| 286 | for r.i < len(r.idmap) && r.idmap[r.i].hi <= r.oldid { |
| 287 | r.i++ |
| 288 | } |
| 289 | if r.i >= len(r.idmap) { |
| 290 | r.count = 0 |
| 291 | break |
| 292 | } |
| 293 | if r.oldid < r.idmap[r.i].lo { |
| 294 | continue |
| 295 | } |
| 296 | r.fileid = r.idmap[r.i].new + r.oldid - r.idmap[r.i].lo |
| 297 | return true |
| 298 | } |
| 299 | |
| 300 | r.fileid = ^uint32(0) |
| 301 | return false |
| 302 | } |
| 303 | |
| 304 | type postDataWriter struct { |
| 305 | out *bufWriter |