1 package com.google.flatbuffers;
2 
3 import java.nio.ByteBuffer;
4 import java.nio.ByteOrder;
5 
6 public class ByteBufferReadWriteBuf implements ReadWriteBuf {
7 
8   private final ByteBuffer buffer;
9 
ByteBufferReadWriteBuf(ByteBuffer bb)10   public ByteBufferReadWriteBuf(ByteBuffer bb) {
11     this.buffer = bb;
12     this.buffer.order(ByteOrder.LITTLE_ENDIAN);
13   }
14 
15   @Override
clear()16   public void clear() {
17     buffer.clear();
18   }
19 
20   @Override
getBoolean(int index)21   public boolean getBoolean(int index) {
22     return get(index) != 0;
23   }
24 
25   @Override
get(int index)26   public byte get(int index) {
27     return buffer.get(index);
28   }
29 
30   @Override
getShort(int index)31   public short getShort(int index) {
32     return buffer.getShort(index);
33   }
34 
35   @Override
getInt(int index)36   public int getInt(int index) {
37     return buffer.getInt(index);
38   }
39 
40   @Override
getLong(int index)41   public long getLong(int index) {
42     return buffer.getLong(index);
43   }
44 
45   @Override
getFloat(int index)46   public float getFloat(int index) {
47     return buffer.getFloat(index);
48   }
49 
50   @Override
getDouble(int index)51   public double getDouble(int index) {
52     return buffer.getDouble(index);
53   }
54 
55   @Override
getString(int start, int size)56   public String getString(int start, int size) {
57     return Utf8Safe.decodeUtf8Buffer(buffer, start, size);
58   }
59 
60   @Override
data()61   public byte[] data() {
62     return buffer.array();
63   }
64 
65   @Override
putBoolean(boolean value)66   public void putBoolean(boolean value) {
67     buffer.put(value ? (byte)1 : (byte)0);
68   }
69 
70   @Override
put(byte[] value, int start, int length)71   public void put(byte[] value, int start, int length) {
72     buffer.put(value, start, length);
73   }
74 
75   @Override
put(byte value)76   public void put(byte value) {
77     buffer.put(value);
78   }
79 
80   @Override
putShort(short value)81   public void putShort(short value) {
82     buffer.putShort(value);
83   }
84 
85   @Override
putInt(int value)86   public void putInt(int value) {
87     buffer.putInt(value);
88   }
89 
90   @Override
putLong(long value)91   public void putLong(long value) {
92     buffer.putLong(value);
93   }
94 
95   @Override
putFloat(float value)96   public void putFloat(float value) {
97     buffer.putFloat(value);
98   }
99 
100   @Override
putDouble(double value)101   public void putDouble(double value) {
102     buffer.putDouble(value);
103   }
104 
105   @Override
setBoolean(int index, boolean value)106   public void setBoolean(int index, boolean value) {
107     set(index, value ? (byte)1 : (byte)0);
108   }
109 
110   @Override
set(int index, byte value)111   public void set(int index, byte value) {
112     requestCapacity(index + 1);
113     buffer.put(index, value);
114   }
115 
116   @Override
set(int index, byte[] value, int start, int length)117   public void set(int index, byte[] value, int start, int length) {
118     requestCapacity(index + (length - start));
119     int curPos = buffer.position();
120     buffer.position(index);
121     buffer.put(value, start, length);
122     buffer.position(curPos);
123   }
124 
125   @Override
setShort(int index, short value)126   public void setShort(int index, short value) {
127     requestCapacity(index + 2);
128     buffer.putShort(index, value);
129   }
130 
131   @Override
setInt(int index, int value)132   public void setInt(int index, int value) {
133     requestCapacity(index + 4);
134     buffer.putInt(index, value);
135   }
136 
137   @Override
setLong(int index, long value)138   public void setLong(int index, long value) {
139     requestCapacity(index + 8);
140     buffer.putLong(index, value);
141   }
142 
143   @Override
setFloat(int index, float value)144   public void setFloat(int index, float value) {
145     requestCapacity(index + 4);
146     buffer.putFloat(index, value);
147   }
148 
149   @Override
setDouble(int index, double value)150   public void setDouble(int index, double value) {
151     requestCapacity(index + 8);
152     buffer.putDouble(index, value);
153   }
154 
155   @Override
writePosition()156   public int writePosition() {
157     return buffer.position();
158   }
159 
160   @Override
limit()161   public int limit() {
162     return buffer.limit();
163   }
164 
165   @Override
requestCapacity(int capacity)166   public boolean requestCapacity(int capacity) {
167     return capacity <= buffer.limit();
168   }
169 
170 }
171