class IpAccessListToBdd {

  public List<PermitAndDenyBdds> reachAndMatchLines(IpAccessList acl) {
    ImmutableList.Builder<PermitAndDenyBdds> bdds = ImmutableList.builder();
    BDD reach = _pkt.getFactory().one();
    for (AclLine line : acl.getLines()) {
      PermitAndDenyBdds match = convert(line);
      bdds.add(match.and(reach));
      reach = reach.diff(match.getMatchBdd());
    }
    bdds.add(new PermitAndDenyBdds(_pkt.getFactory().zero(), reach));
    return bdds.build();
  }

  protected  IpAccessListToBdd(
      @Nonnull BDDPacket pkt,
      @Nonnull BDDSourceManager bddSrcManager,
      @Nonnull Map<String, IpAccessList> aclEnv,
      @Nonnull Map<String, IpSpace> ipSpaceEnv);
  protected  IpAccessListToBdd(
      @Nonnull BDDPacket pkt,
      @Nonnull BDDSourceManager bddSrcManager,
      @Nonnull HeaderSpaceToBDD headerSpaceToBDD,
      @Nonnull Map<String, IpAccessList> aclEnv);

}