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 } |