// Only one value per category optimization
int[] totalMask = new int[maxMaskSize];
int[] totalValue = new int[maxMaskSize];
for (Entry<String, String> entry : filteringFacets.entries()) {
CategoryInfo categoryInfo = maskManager.getCategoryInfos().get(entry.getKey());
if (categoryInfo == null) {
isNoneMatchingFilter = true;
return;
}
int[] bitmask = categoryInfo.getBitmask();
Integer valueCode = categoryInfo.getValueCode(entry.getValue());
if (valueCode == null) {
isNoneMatchingFilter = true;
return;
}
CategoryEncoder.encode(totalValue, 0, bitmask, valueCode);
orArrays(bitmask, totalMask);
}
matchingCategories.add(new CategoryFilter(totalMask, new int[][] { totalValue } ));
} else {
for (String categoryKey : filteringFacets.keySet()) {
CategoryInfo categoryInfo = maskManager.getCategoryInfos().get(categoryKey);
if (categoryInfo == null) {
isNoneMatchingFilter = true;
return;
}
int[] bitmask = categoryInfo.getBitmask();
Collection<String> values = filteringFacets.get(categoryKey);
List<int[]> valuesBitmaps = Lists.newArrayList();
for (String value : values) {
Integer valueCode = categoryInfo.getValueCode(value);
if (valueCode != null) {
int[] encodedValue = CategoryEncoder.encode(new int[0], 0, bitmask, valueCode);
valuesBitmaps.add(encodedValue);
}
}