コード例 #1
0
  protected void encode(HierNode<T> node) {
    Collection<HierNode<T>> parents = node.getParents();
    // System.out.println( "Trying to encode " + node );
    switch (parents.size()) {
      case 0:
        BitSet zero = new BitSet();

        if (hasKey(zero)) {
          HierNode root = getNodeByKey(zero);

          if (root.getValue() != null) {
            fixedRoot = true;
            HierNode previousRoot = root;
            root = new HierNode((Object) null);
            root.addChild(previousRoot);
            previousRoot.addParent(root);

            root.setBitMask(zero);

            propagate(previousRoot, freeBit(root));
            add(root);
          }

          node.addParent(root);
          updateMask(node, increment(root.getBitMask(), freeBit(root)));

        } else {
          updateMask(node, new BitSet());
        }
        break;
      case 1:
        HierNode<T> parent = parents.iterator().next();
        updateMask(node, increment(parent.getBitMask(), freeBit(parent)));
        break;
      default:
        inheritMerged(node);
        // System.out.println( "
        // -----------------------------------------------------------------------------------------
        // " );
        resolveConflicts(node);
        break;
    }
  }
コード例 #2
0
  public BitSet encode(T member, Collection<T> parents) {
    BitSet existing = getCode(member);
    if (existing != null) {
      return existing;
    }

    HierNode<T> node = new HierNode<T>(member);

    Set<HierNode<T>> parentNodes = floor(parents);

    for (HierNode<T> parentNode : parentNodes) {
      node.addParent(parentNode);
      parentNode.addChild(node);
    }
    encode(node);

    add(node);

    return node.getBitMask();
  }