aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/main/java/com
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-02-24 19:46:20 +0100
committerJon Bratseth <bratseth@oath.com>2018-02-24 19:46:20 +0100
commit3777557b0069026d0ba5ace3ff66fca6c7354d92 (patch)
treecacf774dacfcb0f53f6df23b9131930c53ec1520 /searchlib/src/main/java/com
parent81ad685e7517f9d56bca42d85eaf4c7ce24a9ba9 (diff)
Refactor
Diffstat (limited to 'searchlib/src/main/java/com')
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java
index 6277721e8f5..35974c39f69 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java
@@ -4,6 +4,7 @@ package com.yahoo.searchlib.rankingexpression;
import com.yahoo.searchlib.rankingexpression.rule.Arguments;
import com.yahoo.searchlib.rankingexpression.rule.CompositeNode;
import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
+import com.yahoo.searchlib.rankingexpression.rule.NameNode;
import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode;
import com.yahoo.searchlib.rankingexpression.rule.SerializationContext;
import com.yahoo.tensor.evaluation.TypeContext;
@@ -72,6 +73,37 @@ public class Reference extends TypeContext.Name {
}
/**
+ * A <i>simple feature reference</i> is a reference with a single identifier argument
+ * (and an optional output).
+ */
+ public boolean isSimple() {
+ return simpleArgument().isPresent();
+ }
+
+ /**
+ * If the arguments of this contains a single argument which is an identifier, it is returned.
+ * Otherwise null is returned.
+ */
+ public Optional<String> simpleArgument() {
+ if (arguments.expressions().size() != 1) return Optional.empty();
+ ExpressionNode argument = arguments.expressions().get(0);
+
+ if (argument instanceof ReferenceNode) {
+ ReferenceNode refArgument = (ReferenceNode) argument;
+
+ if ( ! refArgument.reference().isIdentifier()) return Optional.empty();
+
+ return Optional.of(refArgument.getName());
+ }
+ else if (argument instanceof NameNode) {
+ return Optional.of(((NameNode) argument).getValue());
+ }
+ else {
+ return Optional.empty();
+ }
+ }
+
+ /**
* Returns whether this is a simple identifier - no arguments or output
*/
public boolean isIdentifier() {