Skip to content

Commit d6eed85

Browse files
divyatalesra-2001NikhilCollooru
authored andcommitted
added float thrift codec
1 parent e70c28c commit d6eed85

18 files changed

+372
-10
lines changed

drift-codec/src/main/java/com/facebook/drift/codec/ThriftCodecManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.facebook.drift.codec.internal.builtin.ByteThriftCodec;
2424
import com.facebook.drift.codec.internal.builtin.DoubleArrayThriftCodec;
2525
import com.facebook.drift.codec.internal.builtin.DoubleThriftCodec;
26+
import com.facebook.drift.codec.internal.builtin.FloatArrayThriftCodec;
27+
import com.facebook.drift.codec.internal.builtin.FloatThriftCodec;
2628
import com.facebook.drift.codec.internal.builtin.IntArrayThriftCodec;
2729
import com.facebook.drift.codec.internal.builtin.IntegerThriftCodec;
2830
import com.facebook.drift.codec.internal.builtin.ListThriftCodec;
@@ -172,6 +174,7 @@ public ThriftCodec<?> load(ThriftType type)
172174
addBuiltinCodec(new IntegerThriftCodec());
173175
addBuiltinCodec(new LongThriftCodec());
174176
addBuiltinCodec(new DoubleThriftCodec());
177+
addBuiltinCodec(new FloatThriftCodec());
175178
addBuiltinCodec(new ByteBufferThriftCodec());
176179
addBuiltinCodec(new StringThriftCodec());
177180
addBuiltinCodec(new VoidThriftCodec());
@@ -181,6 +184,7 @@ public ThriftCodec<?> load(ThriftType type)
181184
addBuiltinCodec(new IntArrayThriftCodec());
182185
addBuiltinCodec(new LongArrayThriftCodec());
183186
addBuiltinCodec(new DoubleArrayThriftCodec());
187+
addBuiltinCodec(new FloatArrayThriftCodec());
184188
addBuiltinCodec(new OptionalDoubleThriftCodec());
185189
addBuiltinCodec(new OptionalIntThriftCodec());
186190
addBuiltinCodec(new OptionalLongThriftCodec());

drift-codec/src/main/java/com/facebook/drift/codec/ThriftProtocolType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public enum ThriftProtocolType
2323
BOOL(TType.BOOL),
2424
BYTE(TType.BYTE),
2525
DOUBLE(TType.DOUBLE),
26+
FLOAT(TType.FLOAT),
2627
I16(TType.I16),
2728
I32(TType.I32),
2829
I64(TType.I64),

drift-codec/src/main/java/com/facebook/drift/codec/internal/ProtocolReader.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,18 @@ public double readDoubleField()
175175
return fieldValue;
176176
}
177177

178+
public float readFloatField()
179+
throws TException
180+
{
181+
if (!checkReadState(TType.FLOAT)) {
182+
return 0;
183+
}
184+
currentField = null;
185+
float fieldValue = protocol.readFloat();
186+
protocol.readFieldEnd();
187+
return fieldValue;
188+
}
189+
178190
public short readI16Field()
179191
throws TException
180192
{
@@ -295,6 +307,18 @@ public double[] readDoubleArrayField()
295307
return fieldValue;
296308
}
297309

310+
public float[] readFloatArrayField()
311+
throws TException
312+
{
313+
if (!checkReadState(TType.LIST)) {
314+
return null;
315+
}
316+
currentField = null;
317+
float[] fieldValue = readFloatArray();
318+
protocol.readFieldEnd();
319+
return fieldValue;
320+
}
321+
298322
public <E> Set<E> readSetField(ThriftCodec<Set<E>> setCodec)
299323
throws Exception
300324
{
@@ -391,6 +415,12 @@ public double readDouble()
391415
return protocol.readDouble();
392416
}
393417

418+
public float readFloat()
419+
throws TException
420+
{
421+
return protocol.readFloat();
422+
}
423+
394424
public String readString()
395425
throws TException
396426
{
@@ -457,6 +487,18 @@ public double[] readDoubleArray()
457487
return array;
458488
}
459489

490+
public float[] readFloatArray()
491+
throws TException
492+
{
493+
TList list = protocol.readListBegin();
494+
float[] array = new float[list.getSize()];
495+
for (int i = 0; i < list.getSize(); i++) {
496+
array[i] = readFloat();
497+
}
498+
protocol.readListEnd();
499+
return array;
500+
}
501+
460502
public <E> Set<E> readSet(ThriftCodec<E> elementCodec)
461503
throws Exception
462504
{

drift-codec/src/main/java/com/facebook/drift/codec/internal/ProtocolWriter.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ public void writeDoubleField(String name, short id, double dub)
102102
protocol.writeFieldEnd();
103103
}
104104

105+
public void writeFloatField(String name, short id, float f)
106+
throws TException
107+
{
108+
protocol.writeFieldBegin(new TField(name, TType.FLOAT, id));
109+
protocol.writeFloat(f);
110+
protocol.writeFieldEnd();
111+
}
112+
105113
public void writeI16Field(String name, short id, short i16)
106114
throws TException
107115
{
@@ -210,6 +218,18 @@ public void writeDoubleArrayField(String name, short id, double[] array)
210218
protocol.writeFieldEnd();
211219
}
212220

221+
public void writeFloatArrayField(String name, short id, float[] array)
222+
throws Exception
223+
{
224+
if (array == null) {
225+
return;
226+
}
227+
228+
protocol.writeFieldBegin(new TField(name, TType.LIST, id));
229+
writeFloatArray(array);
230+
protocol.writeFieldEnd();
231+
}
232+
213233
public <E> void writeSetField(String name, short id, ThriftCodec<Set<E>> codec, Set<E> set)
214234
throws Exception
215235
{
@@ -303,6 +323,12 @@ public void writeDouble(double dub)
303323
protocol.writeDouble(dub);
304324
}
305325

326+
public void writeFloat(float f)
327+
throws TException
328+
{
329+
protocol.writeFloat(f);
330+
}
331+
306332
public void writeString(String string)
307333
throws TException
308334
{
@@ -362,6 +388,16 @@ public void writeDoubleArray(double[] array)
362388
protocol.writeListEnd();
363389
}
364390

391+
public void writeFloatArray(float[] array)
392+
throws TException
393+
{
394+
protocol.writeListBegin(new TList(TType.FLOAT, array.length));
395+
for (float floatValue : array) {
396+
writeFloat(floatValue);
397+
}
398+
protocol.writeListEnd();
399+
}
400+
365401
public <T> void writeSet(ThriftCodec<T> elementCodec, Set<T> set)
366402
throws Exception
367403
{
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Copyright (C) 2014 Facebook, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.facebook.drift.codec.internal.builtin;
17+
18+
import com.facebook.drift.codec.ThriftCodec;
19+
import com.facebook.drift.codec.internal.ProtocolReader;
20+
import com.facebook.drift.codec.internal.ProtocolWriter;
21+
import com.facebook.drift.codec.metadata.ThriftType;
22+
import com.facebook.drift.protocol.TProtocolReader;
23+
import com.facebook.drift.protocol.TProtocolWriter;
24+
25+
import javax.annotation.concurrent.Immutable;
26+
27+
import static java.util.Objects.requireNonNull;
28+
29+
@Immutable
30+
public class FloatArrayThriftCodec
31+
implements ThriftCodec<float[]>
32+
{
33+
@Override
34+
public ThriftType getType()
35+
{
36+
return ThriftType.array(ThriftType.FLOAT);
37+
}
38+
39+
@Override
40+
public float[] read(TProtocolReader protocol)
41+
throws Exception
42+
{
43+
requireNonNull(protocol, "protocol is null");
44+
return new ProtocolReader(protocol).readFloatArray();
45+
}
46+
47+
@Override
48+
public void write(float[] value, TProtocolWriter protocol)
49+
throws Exception
50+
{
51+
requireNonNull(value, "value is null");
52+
requireNonNull(protocol, "protocol is null");
53+
new ProtocolWriter(protocol).writeFloatArray(value);
54+
}
55+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright (C) 2012 Facebook, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.facebook.drift.codec.internal.builtin;
17+
18+
import com.facebook.drift.codec.ThriftCodec;
19+
import com.facebook.drift.codec.metadata.ThriftType;
20+
import com.facebook.drift.protocol.TProtocolReader;
21+
import com.facebook.drift.protocol.TProtocolWriter;
22+
23+
import javax.annotation.concurrent.Immutable;
24+
25+
import static java.util.Objects.requireNonNull;
26+
27+
@Immutable
28+
public class FloatThriftCodec
29+
implements ThriftCodec<Float>
30+
{
31+
@Override
32+
public ThriftType getType()
33+
{
34+
return ThriftType.FLOAT;
35+
}
36+
37+
@Override
38+
public Float read(TProtocolReader protocol)
39+
throws Exception
40+
{
41+
requireNonNull(protocol, "protocol is null");
42+
return protocol.readFloat();
43+
}
44+
45+
@Override
46+
public void write(Float value, TProtocolWriter protocol)
47+
throws Exception
48+
{
49+
requireNonNull(value, "value is null");
50+
requireNonNull(protocol, "protocol is null");
51+
protocol.writeFloat(value);
52+
}
53+
}

drift-codec/src/main/java/com/facebook/drift/codec/internal/compiler/ThriftCodecByteCodeGenerator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
import static com.facebook.drift.codec.ThriftProtocolType.BYTE;
102102
import static com.facebook.drift.codec.ThriftProtocolType.DOUBLE;
103103
import static com.facebook.drift.codec.ThriftProtocolType.ENUM;
104+
import static com.facebook.drift.codec.ThriftProtocolType.FLOAT;
104105
import static com.facebook.drift.codec.ThriftProtocolType.I16;
105106
import static com.facebook.drift.codec.ThriftProtocolType.I32;
106107
import static com.facebook.drift.codec.ThriftProtocolType.I64;
@@ -1108,6 +1109,7 @@ public static ParameterizedType toParameterizedType(ThriftTypeReference typeRef)
11081109
case BOOL:
11091110
case BYTE:
11101111
case DOUBLE:
1112+
case FLOAT:
11111113
case I16:
11121114
case I32:
11131115
case I64:
@@ -1157,6 +1159,7 @@ private Method getReadMethod(ThriftType thriftType)
11571159
writeBuilder.put(BOOL, ProtocolWriter.class.getMethod("writeBoolField", String.class, short.class, boolean.class));
11581160
writeBuilder.put(BYTE, ProtocolWriter.class.getMethod("writeByteField", String.class, short.class, byte.class));
11591161
writeBuilder.put(DOUBLE, ProtocolWriter.class.getMethod("writeDoubleField", String.class, short.class, double.class));
1162+
writeBuilder.put(FLOAT, ProtocolWriter.class.getMethod("writeFloatField", String.class, short.class, float.class));
11601163
writeBuilder.put(I16, ProtocolWriter.class.getMethod("writeI16Field", String.class, short.class, short.class));
11611164
writeBuilder.put(I32, ProtocolWriter.class.getMethod("writeI32Field", String.class, short.class, int.class));
11621165
writeBuilder.put(I64, ProtocolWriter.class.getMethod("writeI64Field", String.class, short.class, long.class));
@@ -1171,6 +1174,7 @@ private Method getReadMethod(ThriftType thriftType)
11711174
readBuilder.put(BOOL, ProtocolReader.class.getMethod("readBoolField"));
11721175
readBuilder.put(BYTE, ProtocolReader.class.getMethod("readByteField"));
11731176
readBuilder.put(DOUBLE, ProtocolReader.class.getMethod("readDoubleField"));
1177+
readBuilder.put(FLOAT, ProtocolReader.class.getMethod("readFloatField"));
11741178
readBuilder.put(I16, ProtocolReader.class.getMethod("readI16Field"));
11751179
readBuilder.put(I32, ProtocolReader.class.getMethod("readI32Field"));
11761180
readBuilder.put(I64, ProtocolReader.class.getMethod("readI64Field"));
@@ -1197,12 +1201,14 @@ private Method getReadMethod(ThriftType thriftType)
11971201
arrayWriteBuilder.put(int[].class, ProtocolWriter.class.getMethod("writeI32ArrayField", String.class, short.class, int[].class));
11981202
arrayWriteBuilder.put(long[].class, ProtocolWriter.class.getMethod("writeI64ArrayField", String.class, short.class, long[].class));
11991203
arrayWriteBuilder.put(double[].class, ProtocolWriter.class.getMethod("writeDoubleArrayField", String.class, short.class, double[].class));
1204+
arrayWriteBuilder.put(float[].class, ProtocolWriter.class.getMethod("writeFloatArrayField", String.class, short.class, float[].class));
12001205

12011206
arrayReadBuilder.put(boolean[].class, ProtocolReader.class.getMethod("readBoolArrayField"));
12021207
arrayReadBuilder.put(short[].class, ProtocolReader.class.getMethod("readI16ArrayField"));
12031208
arrayReadBuilder.put(int[].class, ProtocolReader.class.getMethod("readI32ArrayField"));
12041209
arrayReadBuilder.put(long[].class, ProtocolReader.class.getMethod("readI64ArrayField"));
12051210
arrayReadBuilder.put(double[].class, ProtocolReader.class.getMethod("readDoubleArrayField"));
1211+
arrayReadBuilder.put(float[].class, ProtocolReader.class.getMethod("readFloatArrayField"));
12061212

12071213
// byte[] is encoded as BINARY which should use the normal rules above, but it
12081214
// simpler to add explicit handling here

drift-codec/src/main/java/com/facebook/drift/codec/metadata/ThriftCatalog.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import static com.facebook.drift.codec.metadata.ThriftType.BOOL;
6060
import static com.facebook.drift.codec.metadata.ThriftType.BYTE;
6161
import static com.facebook.drift.codec.metadata.ThriftType.DOUBLE;
62+
import static com.facebook.drift.codec.metadata.ThriftType.FLOAT;
6263
import static com.facebook.drift.codec.metadata.ThriftType.I16;
6364
import static com.facebook.drift.codec.metadata.ThriftType.I32;
6465
import static com.facebook.drift.codec.metadata.ThriftType.I64;
@@ -282,6 +283,9 @@ private ThriftType buildThriftTypeInternal(Type javaType)
282283
if (double.class == rawType) {
283284
return DOUBLE;
284285
}
286+
if (float.class == rawType) {
287+
return FLOAT;
288+
}
285289
if (String.class == rawType) {
286290
return STRING;
287291
}
@@ -462,6 +466,9 @@ public ThriftProtocolType getThriftProtocolType(Type javaType)
462466
if (double.class == rawType) {
463467
return ThriftProtocolType.DOUBLE;
464468
}
469+
if (float.class == rawType) {
470+
return ThriftProtocolType.FLOAT;
471+
}
465472
if (String.class == rawType) {
466473
return ThriftProtocolType.STRING;
467474
}
@@ -529,7 +536,8 @@ public boolean isSupportedArrayComponentType(Class<?> componentType)
529536
short.class == componentType ||
530537
int.class == componentType ||
531538
long.class == componentType ||
532-
double.class == componentType;
539+
double.class == componentType ||
540+
float.class == componentType;
533541
}
534542

535543
/**

drift-codec/src/main/java/com/facebook/drift/codec/metadata/ThriftType.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class ThriftType
4242
public static final ThriftType BOOL = new ThriftType(ThriftProtocolType.BOOL, boolean.class);
4343
public static final ThriftType BYTE = new ThriftType(ThriftProtocolType.BYTE, byte.class);
4444
public static final ThriftType DOUBLE = new ThriftType(ThriftProtocolType.DOUBLE, double.class);
45+
public static final ThriftType FLOAT = new ThriftType(ThriftProtocolType.FLOAT, float.class);
4546
public static final ThriftType I16 = new ThriftType(ThriftProtocolType.I16, short.class);
4647
public static final ThriftType I32 = new ThriftType(ThriftProtocolType.I32, int.class);
4748
public static final ThriftType I64 = new ThriftType(ThriftProtocolType.I64, long.class);
@@ -52,6 +53,7 @@ public class ThriftType
5253
public static final ThriftTypeReference BOOL_REF = new DefaultThriftTypeReference(BOOL);
5354
public static final ThriftTypeReference BYTE_REF = new DefaultThriftTypeReference(BYTE);
5455
public static final ThriftTypeReference DOUBLE_REF = new DefaultThriftTypeReference(DOUBLE);
56+
public static final ThriftTypeReference FLOAT_REF = new DefaultThriftTypeReference(FLOAT);
5557
public static final ThriftTypeReference I16_REF = new DefaultThriftTypeReference(I16);
5658
public static final ThriftTypeReference I32_REF = new DefaultThriftTypeReference(I32);
5759
public static final ThriftTypeReference I64_REF = new DefaultThriftTypeReference(I64);

0 commit comments

Comments
 (0)