blob: 06ec0d692cecce570e66fc7caad50ec32fad2bf0 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.document.datatypes;
import com.yahoo.document.DataType;
import com.yahoo.document.Field;
import com.yahoo.document.PrimitiveDataType;
import com.yahoo.document.serialization.FieldReader;
import com.yahoo.document.serialization.FieldWriter;
import com.yahoo.document.serialization.XmlSerializationHelper;
import com.yahoo.document.serialization.XmlStream;
import com.yahoo.vespa.objects.Ids;
/**
* A 16-bit float field value
*
* @author bratseth
*/
public final class Float16FieldValue extends NumericFieldValue {
private static class Factory extends PrimitiveDataType.Factory {
@Override public FieldValue create() { return new Float16FieldValue(); }
@Override public FieldValue create(String value) { return new Float16FieldValue(value); }
}
public static PrimitiveDataType.Factory getFactory() { return new Factory(); }
public static final int classId = registerClass(Ids.document + 18, Float16FieldValue.class);
private float value; // 16-bit not supported in Java yet
public Float16FieldValue() {
this((float) 0);
}
public Float16FieldValue(float value) {
this.value = value;
}
public Float16FieldValue(Float value) {
this.value = value;
}
public Float16FieldValue(String s) { value = Float.parseFloat(s); }
@Override
public Float16FieldValue clone() {
Float16FieldValue val = (Float16FieldValue) super.clone();
val.value = value;
return val;
}
@Override
public Number getNumber() {
return value;
}
@Override
public void clear() {
value = 0.0f;
}
@Override
public void assign(Object obj) {
if (!checkAssign(obj)) return;
if (obj instanceof Number)
value = ((Number) obj).floatValue();
else if (obj instanceof NumericFieldValue)
value = (((NumericFieldValue) obj).getNumber().floatValue());
else if (obj instanceof String || obj instanceof StringFieldValue)
value = Float.parseFloat(obj.toString());
else
throw new IllegalArgumentException("Class " + obj.getClass() + " not applicable to an " + this.getClass() + " instance.");
}
public float getFloat() {
return value;
}
@Override
public Object getWrappedValue() {
return value;
}
@Override
public DataType getDataType() {
return DataType.FLOAT16;
}
@Override
@Deprecated
public void printXml(XmlStream xml) {
XmlSerializationHelper.printShortfloatXml(this, xml);
}
@Override
public String toString() {
return String.valueOf(value);
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (value != +0.0f ? Float.floatToIntBits(value) : 0);
return result;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Float16FieldValue)) return false;
if (!super.equals(o)) return false;
Float16FieldValue that = (Float16FieldValue) o;
if (Float.compare(that.value, value) != 0) return false;
return true;
}
@Override
public void serialize(Field field, FieldWriter writer) {
writer.write(field, this);
}
/* (non-Javadoc)
* @see com.yahoo.document.datatypes.FieldValue#deserialize(com.yahoo.document.Field, com.yahoo.document.serialization.FieldReader)
*/
@Override
public void deserialize(Field field, FieldReader reader) {
reader.read(field, this);
}
@Override
public int compareTo(FieldValue fieldValue) {
int comp = super.compareTo(fieldValue);
if (comp != 0) return comp;
return Float.compare(value, ((Float16FieldValue) fieldValue).value);
}
}
|