00001
00002 package de.aitools.aq.value.single;
00003
00004 import java.io.PrintStream;
00005 import java.nio.ByteBuffer;
00006 import java.util.Scanner;
00007
00008 import com.sun.jna.Memory;
00009 import com.sun.jna.Pointer;
00010
00011 import de.aitools.aq.check.A;
00012 import de.aitools.aq.value.Value;
00013
00018 public class SingleBuffer extends Value {
00019
00020 public static final int NATIVE_TYPE_ID = 104;
00021
00022 private static final int SIZEOF_BUFFER_SIZE = Value.SIZEOF_SHORT;
00023
00024 public SingleBuffer() {
00025 reallocate(0);
00026 }
00027
00028 public SingleBuffer(byte[] bytes) {
00029 A.CHECK_NOT_NULL(bytes);
00030 e = ByteBuffer.wrap(bytes);
00031 }
00032
00033 public SingleBuffer(SingleBuffer array) {
00034 e = array.e;
00035 }
00036
00037 public SingleBuffer(ByteBuffer buffer) {
00038 A.CHECK_NOT_NULL(buffer);
00039 e = buffer;
00040 }
00041
00042 public SingleBuffer(int capacity) {
00043 reallocate(capacity);
00044 }
00045
00046 public ByteBuffer getBuffer() {
00047 return e;
00048 }
00049
00050 public void setBuffer(ByteBuffer buffer) {
00051 A.CHECK_NOT_NULL(buffer);
00052 e = buffer;
00053 }
00054
00055 @Override
00056 public void copyFrom(Pointer buffer) {
00057 short arraySize = buffer.getShort(0);
00058
00059 e = ByteBuffer.wrap(buffer.getByteArray(SIZEOF_BUFFER_SIZE, arraySize));
00060 }
00061
00062 @Override
00063 public void copyTo(Pointer buffer) {
00064 A.CHECK(e.capacity() <= Short.MAX_VALUE, "Too long byte array");
00065 buffer.setShort(0, (short) e.capacity());
00066 buffer.write(SIZEOF_BUFFER_SIZE, e.array(), 0, e.capacity());
00067 }
00068
00069 @Override
00070 public boolean parseFrom(Scanner sc) {
00071 throw new UnsupportedOperationException("Cannot parse raw byte array");
00072 }
00073
00074 @Override
00075 public PrintStream printTo(PrintStream stream) {
00076 throw new UnsupportedOperationException("Cannot print raw byte array");
00077 }
00078
00079 @Override
00080 public Memory getSharedMemory() {
00081 return new Memory(getSerializedSize());
00082 }
00083
00084 @Override
00085 public int getSerializedSize() {
00086 return SIZEOF_BUFFER_SIZE + e.capacity();
00087 }
00088
00089 @Override
00090 public int hashCode() {
00091 final int prime = 31;
00092 int result = 1;
00093 result = prime * result + ((e == null) ? 0 : e.hashCode());
00094 return result;
00095 }
00096
00097 @Override
00098 public boolean equals(Object obj) {
00099 if (this == obj)
00100 return true;
00101 if (obj == null)
00102 return false;
00103 if (getClass() != obj.getClass())
00104 return false;
00105 SingleBuffer other = (SingleBuffer) obj;
00106 if (e == null) {
00107 if (other.e != null)
00108 return false;
00109 } else if (!e.equals(other.e))
00110 return false;
00111 return true;
00112 }
00113
00114 public void reallocate(int capacity) {
00115
00116 e = ByteBuffer.allocate(capacity);
00117 }
00118
00119 private ByteBuffer e;
00120 }