summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java
diff options
context:
space:
mode:
authorJon Bratseth <jonbratseth@yahoo.com>2018-01-10 10:03:00 +0100
committerGitHub <noreply@github.com>2018-01-10 10:03:00 +0100
commit3e1477f5fda4a3dcd436a6d41843adc66e19f370 (patch)
treef33876464623848d65025a6e8a39c386c76fe710 /config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java
parenta8898cd191476159dcf7eb9a5b366240b2ad091e (diff)
parentdc0f70fac9167acf487453daf565636c675934df (diff)
Merge pull request #4589 from vespa-engine/bratseth/integrate-tensorflow
Basic TensorFlow integration
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java40
1 files changed, 40 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java
new file mode 100644
index 00000000000..a3933e6f8e2
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java
@@ -0,0 +1,40 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition.expressiontransforms;
+
+import com.yahoo.searchdefinition.RankProfile;
+import com.yahoo.searchlib.rankingexpression.rule.CompositeNode;
+import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
+import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode;
+import com.yahoo.searchlib.rankingexpression.transform.ExpressionTransformer;
+
+import java.util.Map;
+
+/**
+ * Inlines macros in ranking expressions
+ *
+ * @author bratseth
+ */
+public class MacroInliner extends ExpressionTransformer {
+
+ private final Map<String, RankProfile.Macro> macros;
+
+ public MacroInliner(Map<String, RankProfile.Macro> macros) {
+ this.macros = macros;
+ }
+
+ @Override
+ public ExpressionNode transform(ExpressionNode node) {
+ if (node instanceof ReferenceNode)
+ return transformFeatureNode((ReferenceNode)node);
+ if (node instanceof CompositeNode)
+ return transformChildren((CompositeNode)node);
+ return node;
+ }
+
+ private ExpressionNode transformFeatureNode(ReferenceNode feature) {
+ RankProfile.Macro macro = macros.get(feature.getName());
+ if (macro == null) return feature;
+ return transform(macro.getRankingExpression().getRoot()); // inline recursively and return
+ }
+
+}