in graphjet-core/src/main/java/com/twitter/graphjet/algorithms/NodeInfoHelper.java [56:98]
public static boolean removeUnfavoritedSocialProofs(NodeInfo nodeInfo) {
if (!isUnfavoriteTypeSupported(nodeInfo)) {
return false;
}
SmallArrayBasedLongToDoubleMap[] socialProofs = nodeInfo.getSocialProofs();
SmallArrayBasedLongToDoubleMap unfavSocialProofs = socialProofs[UNFAVORITE_SOCIAL_PROOF_TYPE];
SmallArrayBasedLongToDoubleMap favSocialProofs = socialProofs[FAVORITE_SOCIAL_PROOF_TYPE];
if (unfavSocialProofs == null) {
return false;
}
// Always remove unfavorite social proofs, as they are only meant for internal processing and
// not to be returned to the caller.
double unfavWeightToRemove = 0;
for (int i = 0; i < unfavSocialProofs.size(); i++) {
unfavWeightToRemove += unfavSocialProofs.values()[i];
}
nodeInfo.setWeight(nodeInfo.getWeight() - unfavWeightToRemove);
socialProofs[UNFAVORITE_SOCIAL_PROOF_TYPE] = null;
// Remove favorite social proofs that were unfavorited and the corresponding weights
if (favSocialProofs != null) {
int favWeightToRemove = 0;
SmallArrayBasedLongToDoubleMap newFavSocialProofs = new SmallArrayBasedLongToDoubleMap();
for (int i = 0; i < favSocialProofs.size(); i++) {
long favUser = favSocialProofs.keys()[i];
double favWeight = favSocialProofs.values()[i];
if (unfavSocialProofs.contains(favUser)) {
favWeightToRemove += favWeight;
} else {
newFavSocialProofs.put(favUser, favWeight, favSocialProofs.metadata()[i]);
}
}
// Add the filtered Favorite social proofs
nodeInfo.setWeight(nodeInfo.getWeight() - favWeightToRemove);
socialProofs[FAVORITE_SOCIAL_PROOF_TYPE] = (newFavSocialProofs.size() != 0) ? newFavSocialProofs : null;
}
return true;
}