Mercurial > jhg
annotate src/com/tmate/hgkit/fs/ByteArrayDataAccess.java @ 159:f5aed108754e wrap-data-access
Approach with DataAccess instead of plain byte[] was merged into default branch
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 09 Mar 2011 13:28:02 +0100 | 
| parents | 9429c7bd1920 | 
| children | 
| rev | line source | 
|---|---|
| 51 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 1 /* | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 2 * Copyright (c) 2011 Artem Tikhomirov | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 3 */ | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 4 package com.tmate.hgkit.fs; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 5 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 6 import java.io.IOException; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 7 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 8 /** | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 9 * | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 10 * @author artem | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 11 */ | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 12 public class ByteArrayDataAccess extends DataAccess { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 13 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 14 private final byte[] data; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 private final int offset; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 private final int length; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 17 private int pos; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 19 public ByteArrayDataAccess(byte[] data) { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 20 this(data, 0, data.length); | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 21 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 22 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 23 public ByteArrayDataAccess(byte[] data, int offset, int length) { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 24 this.data = data; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 25 this.offset = offset; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 26 this.length = length; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 27 pos = 0; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 28 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 29 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 30 @Override | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 31 public byte readByte() throws IOException { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 32 if (pos >= length) { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 33 throw new IOException(); | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 34 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 35 return data[offset + pos++]; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 36 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 37 @Override | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 38 public void readBytes(byte[] buf, int off, int len) throws IOException { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 39 if (len > (this.length - pos)) { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 40 throw new IOException(); | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 41 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 42 System.arraycopy(data, pos, buf, off, len); | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 43 pos += len; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 44 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 45 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 46 @Override | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 47 public void reset() { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 48 pos = 0; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 49 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 50 @Override | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 51 public long length() { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 52 return length; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 53 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 54 @Override | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 55 public void seek(long offset) { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 56 pos = (int) offset; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 57 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 58 @Override | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 59 public void skip(int bytes) throws IOException { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 60 seek(pos + bytes); | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 61 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 62 @Override | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 63 public boolean isEmpty() { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 64 return pos >= length; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 65 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 66 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 67 // | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 68 | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 69 // when byte[] needed from DA, we may save few cycles and some memory giving this (otherwise unsafe) access to underlying data | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 70 @Override | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 71 public byte[] byteArray() { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 72 return data; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 73 } | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 74 } | 
