public void removeUndefeated(
      DefeasibleLogicalDependency dep, LinkedListEntry<DefeasibleLogicalDependency> node) {
    boolean pos = dep.getValue() == null || MODE.POSITIVE.getId().equals(dep.getValue().toString());
    switch (dep.getStatus()) {
      case DEFINITELY:
        if (pos) {
          definitelyPosCount--;
          if (definitelyPosCount == 0) {
            statusMask = statusMask ^ DEFINITELY_POS_BIT;
          }
        } else {
          definitelyNegCount--;
          if (definitelyNegCount == 0) {
            statusMask = statusMask ^ DEFINITELY_NEG_BIT;
          }
        }
        break;
      case DEFEASIBLY:
        if (pos) {
          defeasiblyPosCount--;
          if (defeasiblyPosCount == 0) {
            statusMask = statusMask ^ DEFEASIBLY_POS_BIT;
          }
        } else {
          defeasiblyNegCount--;
          if (defeasiblyNegCount == 0) {
            statusMask = statusMask ^ DEFEASIBLY_NEG_BIT;
          }
        }
        break;
      case DEFEATEDLY:
        if (pos) {
          defeatedlyPosCount--;
          if (defeatedlyPosCount == 0) {
            statusMask = statusMask ^ DEFEATEDLY_POS_BIT;
          }
        } else {
          defeatedlyNegCount--;
          if (defeatedlyNegCount == 0) {
            statusMask = statusMask ^ DEFEATEDLY_NEG_BIT;
          }
        }
        break;
      case UNDECIDABLY:
        throw new IllegalStateException("Individual logical dependencies cannot be undecidably");
    }

    if (this.rootUndefeated == node) {
      removeFirst();
    } else if (this.tailUndefeated == node) {
      removeLast();
    } else {
      node.getPrevious().setNext(node.getNext());
      ((LinkedListNode) node.getNext()).setPrevious(node.getPrevious());
      node.nullPrevNext();
    }
  }
  public void addUndefeated(
      DefeasibleLogicalDependency dep, LinkedListEntry<DefeasibleLogicalDependency> node) {
    boolean pos = dep.getValue() == null || MODE.POSITIVE.getId().equals(dep.getValue().toString());
    switch (dep.getStatus()) {
      case DEFINITELY:
        if (pos) {
          definitelyPosCount++;
          statusMask = statusMask | DEFINITELY_POS_BIT;
        } else {
          definitelyNegCount++;
          statusMask = statusMask | DEFINITELY_NEG_BIT;
        }
        break;
      case DEFEASIBLY:
        if (pos) {
          defeasiblyPosCount++;
          statusMask = statusMask | DEFEASIBLY_POS_BIT;
        } else {
          defeasiblyNegCount++;
          statusMask = statusMask | DEFEASIBLY_NEG_BIT;
        }
        break;
      case DEFEATEDLY:
        if (pos) {
          defeatedlyPosCount++;
          statusMask = statusMask | DEFEATEDLY_POS_BIT;
        } else {
          defeatedlyNegCount++;
          statusMask = statusMask | DEFEATEDLY_NEG_BIT;
        }
        break;
      case UNDECIDABLY:
        throw new IllegalStateException("Individual logical dependencies cannot be undecidably");
    }

    if (rootUndefeated == null) {
      rootUndefeated = node;
      tailUndefeated = node;
    } else {
      if (dep.getStatus() == DefeasibilityStatus.DEFINITELY) {
        // Strict dependencies at to the front
        rootUndefeated.setPrevious(node);
        node.setNext(rootUndefeated);
        rootUndefeated = node;
      } else {
        // add to end
        tailUndefeated.setNext(node);
        node.setPrevious(tailUndefeated);
        tailUndefeated = node;
      }
    }
  }