package plan9.lib;// from styx-n-9p.googlecode.com, MIT licenceimport java.lang.*;import java.util.Arrays;import java.nio.ByteBuffer;public class Packer { byte[] data; int o0; // initial offset int o; public Packer(int n){ o = o0 = 0; data = new byte[n]; } public Packer(byte[] a){ o = o0 = 0; data = a; } public Packer(byte[] a, int offset){ o = o0 = offset; data = a; } public void restart(){ o = o0; } public int length(){ return o-o0; } public ByteBuffer buffer(){ return ByteBuffer.wrap(data, o0, length()); } public byte[] array(){ return data; } public int offset(){ return o; } public byte get(){ return data[o++]; } public int get1(){ return (int)data[o++] & 0xFF; } public int get2(){ int v; v = (int)data[o+0] & 0xFF; v |= ((int)data[o+1] & 0xFF)<<8; o += 2; return v; } public int get4(){ int v; v = (int)data[o+0] & 0xFF; v |= ((int)data[o+1] & 0xFF)<<8; v |= ((int)data[o+2] & 0xFF)<<16; v |= ((int)data[o+3] & 0xFF)<<24; o += 4; return v; } public long get8(){ long n0 = (long)get4() & 0xFFFFFFFFL; return ((long)get4() << 32) | n0; } public byte[] geta(int n){ byte[] a = new byte[n]; System.arraycopy(data, o, a, 0, n); o += n; return a; } public final void put(byte b){ data[o++] = b; } public final void put1(int v){ data[o++] = (byte)(v & 0xFF); } public final void put2(int v){ data[o+0] = (byte)(v); data[o+1] = (byte)(v>>8); o += 2; } public final void put4(int v){ data[o+0] = (byte)v; data[o+1] = (byte)(v>>8); data[o+2] = (byte)(v>>16); data[o+3] = (byte)(v>>24); o += 4; } public final void put8(long v){ data[o+0] = (byte)v; data[o+1] = (byte)(v>>8); data[o+2] = (byte)(v>>16); data[o+3] = (byte)(v>>24); data[o+4] = (byte)(v>>32); data[o+5] = (byte)(v>>40); data[o+6] = (byte)(v>>48); data[o+7] = (byte)(v>>56); o += 8; } public final void puta(byte[] a, int n){ if(a != null && a.length != 0){ int l = a.length < n? a.length: n; System.arraycopy(a, 0, data, o, l); o += l; n -= l; } if(n > 0){ Arrays.fill(data, o, o+n, (byte)0); o += n; } } public final void puta(byte[] a){ // a must not be null puta(a, a.length); } public final String gets(int n){ // fixed-length string with null byte try{ int o1 = o; o += n; if(n > 0) n--; // must have null byte for(int i = 0; i < n; i++){ if(data[o1+i] == (byte)0){ n = i; break; } } return new String(data, o1, n, "UTF-8"); }catch(java.io.UnsupportedEncodingException e){ return "Egosling"; } } public final void puts(String s){ // string with explicit count if(s == null || s.length() == 0){ put2(0); return; } byte[] a = Strings.bytes(s); put2(a.length); puta(a, a.length); } public final void puts(String s, int n) { // string as fixed array puta(Strings.bytes(s), n); }}
package plan9.lib;
// from styx-n-9p.googlecode.com, MIT licence
import java.lang.*;
import java.util.Arrays;
import java.nio.ByteBuffer;
public class Packer {
byte[] data;
int o0; // initial offset
int o;
public Packer(int n){
o = o0 = 0;
data = new byte[n];
}
public Packer(byte[] a){
o = o0 = 0;
data = a;
}
public Packer(byte[] a, int offset){
o = o0 = offset;
data = a;
}
public void restart(){
o = o0;
}
public int length(){
return o-o0;
}
public ByteBuffer buffer(){
return ByteBuffer.wrap(data, o0, length());
}
public byte[] array(){
return data;
}
public int offset(){
return o;
}
public byte get(){
return data[o++];
}
public int get1(){
return (int)data[o++] & 0xFF;
}
public int get2(){
int v;
v = (int)data[o+0] & 0xFF;
v |= ((int)data[o+1] & 0xFF)<<8;
o += 2;
return v;
}
public int get4(){
int v;
v = (int)data[o+0] & 0xFF;
v |= ((int)data[o+1] & 0xFF)<<8;
v |= ((int)data[o+2] & 0xFF)<<16;
v |= ((int)data[o+3] & 0xFF)<<24;
o += 4;
return v;
}
public long get8(){
long n0 = (long)get4() & 0xFFFFFFFFL;
return ((long)get4() << 32) | n0;
}
public byte[] geta(int n){
byte[] a = new byte[n];
System.arraycopy(data, o, a, 0, n);
o += n;
return a;
}
public final void put(byte b){
data[o++] = b;
}
public final void put1(int v){
data[o++] = (byte)(v & 0xFF);
}
public final void put2(int v){
data[o+0] = (byte)(v);
data[o+1] = (byte)(v>>8);
o += 2;
}
public final void put4(int v){
data[o+0] = (byte)v;
data[o+1] = (byte)(v>>8);
data[o+2] = (byte)(v>>16);
data[o+3] = (byte)(v>>24);
o += 4;
}
public final void put8(long v){
data[o+0] = (byte)v;
data[o+1] = (byte)(v>>8);
data[o+2] = (byte)(v>>16);
data[o+3] = (byte)(v>>24);
data[o+4] = (byte)(v>>32);
data[o+5] = (byte)(v>>40);
data[o+6] = (byte)(v>>48);
data[o+7] = (byte)(v>>56);
o += 8;
}
public final void puta(byte[] a, int n){
if(a != null && a.length != 0){
int l = a.length < n? a.length: n;
System.arraycopy(a, 0, data, o, l);
o += l;
n -= l;
}
if(n > 0){
Arrays.fill(data, o, o+n, (byte)0);
o += n;
}
}
public final void puta(byte[] a){ // a must not be null
puta(a, a.length);
}
public final String gets(int n){ // fixed-length string with null byte
try{
int o1 = o;
o += n;
if(n > 0)
n--; // must have null byte
for(int i = 0; i < n; i++){
if(data[o1+i] == (byte)0){
n = i;
break;
}
}
return new String(data, o1, n, "UTF-8");
}catch(java.io.UnsupportedEncodingException e){
return "Egosling";
}
}
public final void puts(String s){ // string with explicit count
if(s == null || s.length() == 0){
put2(0);
return;
}
byte[] a = Strings.bytes(s);
put2(a.length);
puta(a, a.length);
}
public final void puts(String s, int n) { // string as fixed array
puta(Strings.bytes(s), n);
}
}