Mercurial > hg4j
comparison src/org/tmatesoft/hg/internal/ByteArrayChannel.java @ 608:e1b29756f901
Clean, organize and resolve some TODOs and FIXMEs: minor refactorings and comments
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 07 May 2013 21:27:51 +0200 |
| parents | 1a7a9a20e1f9 |
| children |
comparison
equal
deleted
inserted
replaced
| 607:66f1cc23b906 | 608:e1b29756f901 |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 TMate Software Ltd | 2 * Copyright (c) 2011-2013 TMate Software Ltd |
| 3 * | 3 * |
| 4 * This program is free software; you can redistribute it and/or modify | 4 * This program is free software; you can redistribute it and/or modify |
| 5 * it under the terms of the GNU General Public License as published by | 5 * it under the terms of the GNU General Public License as published by |
| 6 * the Free Software Foundation; version 2 of the License. | 6 * the Free Software Foundation; version 2 of the License. |
| 7 * | 7 * |
| 21 import java.util.List; | 21 import java.util.List; |
| 22 | 22 |
| 23 import org.tmatesoft.hg.util.ByteChannel; | 23 import org.tmatesoft.hg.util.ByteChannel; |
| 24 | 24 |
| 25 /** | 25 /** |
| 26 * | 26 * {@link ByteChannel} implementation that serializes data into a byte array |
| 27 * | |
| 27 * @author Artem Tikhomirov | 28 * @author Artem Tikhomirov |
| 28 * @author TMate Software Ltd. | 29 * @author TMate Software Ltd. |
| 29 */ | 30 */ |
| 30 public class ByteArrayChannel implements ByteChannel { | 31 public class ByteArrayChannel implements ByteChannel { |
| 31 private final List<ByteBuffer> buffers; | 32 private final List<ByteBuffer> buffers; |
| 46 buffers = null; | 47 buffers = null; |
| 47 target = ByteBuffer.allocate(size); | 48 target = ByteBuffer.allocate(size); |
| 48 } | 49 } |
| 49 } | 50 } |
| 50 | 51 |
| 51 // TODO document what happens on write after toArray() in each case | 52 /* |
| 53 * {@link #toArray()} calls do not clear data collected so far, subsequent {@link #write(ByteBuffer)} | |
| 54 * augment collected content. | |
| 55 */ | |
| 52 public int write(ByteBuffer buffer) { | 56 public int write(ByteBuffer buffer) { |
| 53 int rv = buffer.remaining(); | 57 int rv = buffer.remaining(); |
| 54 if (buffers == null) { | 58 if (buffers == null) { |
| 55 target.put(buffer); | 59 target.put(buffer); |
| 56 } else { | 60 } else { |
| 57 ByteBuffer copy = ByteBuffer.allocate(rv); | 61 ByteBuffer copy = ByteBuffer.allocate(rv); |
| 58 copy.put(buffer); | 62 copy.put(buffer); |
| 59 buffers.add(copy); | 63 buffers.add(copy); |
| 60 } | 64 } |
| 65 result = null; | |
| 61 return rv; | 66 return rv; |
| 62 } | 67 } |
| 63 | 68 |
| 69 /** | |
| 70 * @return content accumulated so far | |
| 71 */ | |
| 64 public byte[] toArray() { | 72 public byte[] toArray() { |
| 65 if (result != null) { | 73 if (result != null) { |
| 66 return result; | 74 return result; |
| 67 } | 75 } |
| 68 if (buffers == null) { | 76 if (buffers == null) { |
| 82 int off = 0; | 90 int off = 0; |
| 83 for (ByteBuffer bb : buffers) { | 91 for (ByteBuffer bb : buffers) { |
| 84 bb.get(result, off, bb.limit()); | 92 bb.get(result, off, bb.limit()); |
| 85 off += bb.limit(); | 93 off += bb.limit(); |
| 86 } | 94 } |
| 87 buffers.clear(); | |
| 88 return result; | 95 return result; |
| 89 } | 96 } |
| 90 } | 97 } |
| 91 } | 98 } |
