/* This file is part of the db4o object database http://www.db4o.com
Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com
db4o is free software; you can redistribute it and/or modify it under
the terms of version 3 of the GNU General Public License as published
by the Free Software Foundation.
db4o is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/. */
package com.db4o.foundation;
import java.io.*;
public final class PrimitiveCodec {
public static final int INT_LENGTH = 4;
public static final int LONG_LENGTH = 8;
public static final int readInt(byte[] buffer, int offset){
offset += 3;
return (buffer[offset] & 255) | (buffer[--offset] & 255)
<< 8 | (buffer[--offset] & 255)
<< 16 | buffer[--offset]
<< 24;
}
public static final int readInt(ByteArrayInputStream in){
return (in.read() << 24) | ((in.read() & 255) << 16) | ((in.read() & 255) << 8) | (in.read() & 255);
}
public static final void writeInt(byte[] buffer, int offset, int val){
offset += 3;
buffer[offset] = (byte)val;
buffer[--offset] = (byte) (val >>= 8);
buffer[--offset] = (byte) (val >>= 8);
buffer[--offset] = (byte) (val >> 8);
}
public static final void writeInt(ByteArrayOutputStream out, int val){
out.write((byte)(val >> 24));
out.write((byte)(val >> 16));
out.write((byte)(val >> 8));
out.write((byte)val);
}
public static final void writeLong(byte[] buffer, long val){
writeLong(buffer, 0, val);
}
public static final void writeLong(byte[] buffer, int offset, long val){
for (int i = 0; i < LONG_LENGTH; i++){
buffer[offset++] = (byte) (val >> ((7 - i) * 8));
}
}
public static final void writeLong(ByteArrayOutputStream out, long val){
for (int i = 0; i < LONG_LENGTH; i++){
out.write((byte) (val >> ((7 - i) * 8)));
}
}
public static final long readLong(byte[] buffer, int offset){
long ret = 0;
for (int i = 0; i < LONG_LENGTH; i++){
ret = (ret << 8) + (buffer[offset++] & 0xff);
}
return ret;
}
public static final long readLong(ByteArrayInputStream in){
long ret = 0;
for (int i = 0; i < LONG_LENGTH; i++){
ret = (ret << 8) + ((byte)in.read() & 0xff);
}
return ret;
}
}