public int traverseDiffs()

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;
    }