summaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-11-15 00:07:46 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2016-11-15 00:07:46 +0100
commit2126b575120e3d8166ce668341886abde62fde07 (patch)
tree5ec5662a8d555a2c2c6cd479aa219e30aaf3e053 /document
parent43ef97313b369a484ec983b814e397720bb80a13 (diff)
Use constant time hash lookups for non-struct and non-string fields for getFieldValue() and getField().
Diffstat (limited to 'document')
-rw-r--r--document/src/main/java/com/yahoo/document/ExtendedField.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/document/src/main/java/com/yahoo/document/ExtendedField.java b/document/src/main/java/com/yahoo/document/ExtendedField.java
new file mode 100644
index 00000000000..672a824bcf4
--- /dev/null
+++ b/document/src/main/java/com/yahoo/document/ExtendedField.java
@@ -0,0 +1,21 @@
+package com.yahoo.document;
+
+import com.yahoo.document.datatypes.FieldValue;
+
+/**
+ * Created by balder on 14/11/2016.
+ */
+class ExtendedField extends Field {
+ static interface Extract {
+ Object get(Document doc);
+ }
+ private final Extract extract;
+ ExtendedField(String name, DataType type, Extract extract) {
+ super(name, type);
+ this.extract = extract;
+ }
+ FieldValue getFieldValue(Document doc) {
+ Object raw = extract.get(doc);
+ return raw == null ? null : getDataType().createFieldValue(raw);
+ }
+}