comparison src/org/tmatesoft/hg/internal/DataAccess.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 48f993aa2f41
children 4f93bbc73b64
comparison
equal deleted inserted replaced
607:66f1cc23b906 608:e1b29756f901
1 /* 1 /*
2 * Copyright (c) 2010-2012 TMate Software Ltd 2 * Copyright (c) 2010-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 *
97 if (length == 0) { 97 if (length == 0) {
98 return; 98 return;
99 } 99 }
100 throw new IOException(String.format("No data, can't read %d bytes", length)); 100 throw new IOException(String.format("No data, can't read %d bytes", length));
101 } 101 }
102 // reads bytes into ByteBuffer, up to its limit or total data length, whichever smaller 102 /**
103 // TODO post-1.0 perhaps, in DataAccess paradigm (when we read known number of bytes, we shall pass specific byte count to read) 103 * reads bytes into ByteBuffer, up to its limit or total data length, whichever smaller.
104 // for 1.0, it's ok as it's our internal class 104 * XXX perhaps, in DataAccess paradigm (when we read known number of bytes, we shall pass specific byte count to read)
105 */
105 public void readBytes(ByteBuffer buf) throws IOException { 106 public void readBytes(ByteBuffer buf) throws IOException {
106 // int toRead = Math.min(buf.remaining(), (int) length()); 107 // int toRead = Math.min(buf.remaining(), (int) length());
107 // if (buf.hasArray()) { 108 // if (buf.hasArray()) {
108 // readBytes(buf.array(), buf.arrayOffset(), toRead); 109 // readBytes(buf.array(), buf.arrayOffset(), toRead);
109 // } else { 110 // } else {
110 // byte[] bb = new byte[toRead]; 111 // byte[] bb = new byte[toRead];
111 // readBytes(bb, 0, bb.length); 112 // readBytes(bb, 0, bb.length);
112 // buf.put(bb); 113 // buf.put(bb);
113 // } 114 // }
114 // TODO post-1.0 optimize to read as much as possible at once 115 // TODO [post-1.1] optimize to read as much as possible at once
115 while (!isEmpty() && buf.hasRemaining()) { 116 while (!isEmpty() && buf.hasRemaining()) {
116 buf.put(readByte()); 117 buf.put(readByte());
117 } 118 }
118 } 119 }
119 public byte readByte() throws IOException { 120 public byte readByte() throws IOException {
120 throw new UnsupportedOperationException(); 121 throw new UnsupportedOperationException();
121 } 122 }
122 123
123 // XXX decide whether may or may not change position in the DataAccess 124 /**
124 // TODO REVISIT exception handling may not be right, initially just for the sake of quick test 125 * Content of this DataAccess as byte array.
126 * Note, likely changes position in the DataAccess.
127 * Might provide direct access to underlying data structure in certain cases, do not alter.
128 *
129 * @return byte array of {@link #length()} size, filled with data
130 * @throws IOException
131 */
125 public byte[] byteArray() throws IOException { 132 public byte[] byteArray() throws IOException {
126 reset(); 133 reset();
127 byte[] rv = new byte[length()]; 134 byte[] rv = new byte[length()];
128 readBytes(rv, 0, rv.length); 135 readBytes(rv, 0, rv.length);
129 return rv; 136 return rv;