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