Shrink the messages and seqnums arrays. newend is one past last valid element. oldend is one past the previous last valid element.
(int newend, int oldend)
| 335 | * valid element. oldend is one past the previous last valid element. |
| 336 | */ |
| 337 | private void shrink(int newend, int oldend) { |
| 338 | size = newend - 1; |
| 339 | if (logger.isLoggable(Level.FINE)) |
| 340 | logger.fine("size now " + size); |
| 341 | if (size == 0) { // no messages left |
| 342 | messages = null; |
| 343 | seqnums = null; |
| 344 | } else if (size > SLOP && size < messages.length / 2) { |
| 345 | // if array shrinks by too much, reallocate it |
| 346 | logger.fine("reallocate array"); |
| 347 | IMAPMessage[] newm = new IMAPMessage[size + SLOP]; |
| 348 | System.arraycopy(messages, 0, newm, 0, size); |
| 349 | messages = newm; |
| 350 | if (seqnums != null) { |
| 351 | int[] news = new int[size + SLOP]; |
| 352 | System.arraycopy(seqnums, 0, news, 0, size); |
| 353 | seqnums = news; |
| 354 | } |
| 355 | } else { |
| 356 | if (logger.isLoggable(Level.FINE)) |
| 357 | logger.fine("clean " + newend + " to " + oldend); |
| 358 | // clear out unused entries in array |
| 359 | for (int msgnum = newend; msgnum < oldend; msgnum++) { |
| 360 | messages[msgnum-1] = null; |
| 361 | if (seqnums != null) |
| 362 | seqnums[msgnum-1] = 0; |
| 363 | } |
| 364 | } |
| 365 | } |
| 366 | |
| 367 | /** |
| 368 | * Add count messages to the cache. |
no test coverage detected