in hollow/src/main/java/com/netflix/hollow/tools/diff/count/HollowDiffObjectCountingNode.java [103:153]
public int traverseDiffs(IntList fromOrdinals, IntList toOrdinals) {
int score = 0;
for(int i=0;i<fieldNodes.length;i++) {
int fromFieldIdx = fromFieldMapping[i];
int toFieldIdx = toFieldMapping[i];
if(unionSchema.getFieldType(i) == FieldType.REFERENCE) {
traversalFromOrdinals.clear();
traversalToOrdinals.clear();
if(fromFieldIdx != -1) {
for(int j=0;j<fromOrdinals.size();j++) {
int fromOrdinal = fromOrdinals.get(j);
int refOrdinal = fromState.readOrdinal(fromOrdinal, fromFieldIdx);
if(refOrdinal != -1)
traversalFromOrdinals.add(refOrdinal);
}
}
if(toFieldIdx != -1) {
for(int j=0;j<toOrdinals.size();j++) {
int toOrdinal = toOrdinals.get(j);
int refOrdinal = toState.readOrdinal(toOrdinal, toFieldIdx);
if(refOrdinal != -1)
traversalToOrdinals.add(refOrdinal);
}
}
if(traversalFromOrdinals.size() != 0 || traversalToOrdinals.size() != 0) {
fieldEqualOrdinalFilters[i].filter(traversalFromOrdinals, traversalToOrdinals);
if(fieldEqualOrdinalFilters[i].getUnmatchedFromOrdinals().size() != 0 || fieldEqualOrdinalFilters[i].getUnmatchedToOrdinals().size() != 0)
score += fieldNodes[i].traverseDiffs(fieldEqualOrdinalFilters[i].getUnmatchedFromOrdinals(), fieldEqualOrdinalFilters[i].getUnmatchedToOrdinals());
if(fieldRequiresMissingFieldTraversal[i])
if(fieldEqualOrdinalFilters[i].getMatchedFromOrdinals().size() != 0 || fieldEqualOrdinalFilters[i].getMatchedToOrdinals().size() != 0)
score += fieldNodes[i].traverseMissingFields(fieldEqualOrdinalFilters[i].getMatchedFromOrdinals(), fieldEqualOrdinalFilters[i].getMatchedToOrdinals());
}
} else {
if(fromFieldIdx == -1)
score += fieldNodes[i].traverseDiffs(EMPTY_ORDINAL_LIST, toOrdinals);
else if(toFieldIdx == -1)
score += fieldNodes[i].traverseDiffs(fromOrdinals, EMPTY_ORDINAL_LIST);
else
score += fieldNodes[i].traverseDiffs(fromOrdinals, toOrdinals);
}
}
return score;
}