| 282 | |
| 283 | template <typename TIter> |
| 284 | void append(TIter b, TIter e) { |
| 285 | size_t sz = e - b; |
| 286 | size_t sz1 = Min<size_t>(sz, PageSize - CurrentPageSize()); |
| 287 | size_t sz2 = (sz - sz1) / PageSize; |
| 288 | size_t sz3 = (sz - sz1) % PageSize; |
| 289 | |
| 290 | if (sz1) { |
| 291 | PrepareAppend(); |
| 292 | TPage& p = CurrentPage(); |
| 293 | p.insert(p.end(), b, b + sz1); |
| 294 | } |
| 295 | |
| 296 | for (size_t i = 0; i < sz2; ++i) { |
| 297 | AllocateNewPage(); |
| 298 | TPage& p = CurrentPage(); |
| 299 | p.insert(p.end(), b + sz1 + i * PageSize, b + sz1 + (i + 1) * PageSize); |
| 300 | } |
| 301 | |
| 302 | if (sz3) { |
| 303 | AllocateNewPage(); |
| 304 | TPage& p = CurrentPage(); |
| 305 | p.insert(p.end(), b + sz1 + sz2 * PageSize, e); |
| 306 | } |
| 307 | } |
| 308 | |
| 309 | iterator erase(iterator it) { |
| 310 | size_t pnum = PageNumber(it.Offset); |