diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java index 27f600f9ad6..3812cdaac3c 100644 --- a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java +++ b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java @@ -86,6 +86,27 @@ public class Binding implements Comparable<Binding> { this.hashCode = Arrays.hashCode(dimensions) + 11 * Arrays.hashCode(dimensionValues); } + /** + * Returns whether this binding is a proper generalization of the given binding: + * Meaning it contains a proper subset of the given bindings. + */ + public boolean generalizes(Binding binding) { + if ( dimensions.length >= binding.dimensions.length) return false; + for (int i = 0; i < dimensions.length; i++) { + int indexOfDimension = indexOf(dimensions[i], binding.dimensions); + if (indexOfDimension < 0) return false; + if ( ! binding.dimensionValues[i].equals(binding.dimensionValues[indexOfDimension])) return false; + } + return true; + } + + private int indexOf(String value, String[] array) { + for (int i = 0; i < array.length; i++) { + if (array[i].equals(value)) + return i; + } + return -1; + } /** Returns true only if this binding is null (contains no values for its dimensions (if any) */ public boolean isNull() { return dimensions.length == 0; } |