public static boolean removeUnfavoritedSocialProofs()

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