Package hampi.stp

Source Code of hampi.stp.BVExpr

package hampi.stp;

import hampi.utils.*;
import stp.Expr;

/**
* Bitvector declaration.
*/
public class BVExpr extends STPExpr{

  private final String name;
  private final int    size;

  public static BVExpr create(STPSolver solver, String name, int size){
    return new BVExpr(solver, name, size);
  }

  private BVExpr(STPSolver solver, String name, int size){
    super(STPExprKind.BVExpr, solver);
    assert name != null;
    assert size > 0;
    this.name = name;
    this.size = size;
  }

  @Override
  public String toString(int indent){
    return Utils.spaces(indent) + name + "(" + size + ")";
  }

  public int vectorSize(){
    return size;
  }

  public String getName(){
    return name;
  }

  @Override
  public Expr internalGetExpr(SolvingContext sc, int shift){
    getSolver().nativeSTPObjectCreationTimer.start();
    Expr results = sc.getVC().varExpr(name, sc.getVC().bvType(size));
    getSolver().nativeSTPObjectCreationTimer.stop();
    return results;
  }

  private final DoubleKeyMap<Integer, Integer, STPExpr> cachedExtract = new DoubleKeyMap<Integer, Integer, STPExpr>();

  /**
   * Returns an expression that denotes a specified subvector.
   */
  public STPExpr extract(int high_bit_no, int low_bit_no, int encodingSize){
    STPExpr cached = cachedExtract.get(high_bit_no, low_bit_no);
    if (cached != null)
      return cached;
    ExtractExpr exp = new ExtractExpr(getSolver(), this, high_bit_no, low_bit_no, encodingSize);
    cachedExtract.put(high_bit_no, low_bit_no, exp);
    return exp;
  }

  @Override
  public int size(){
    return 1;
  }
}
TOP

Related Classes of hampi.stp.BVExpr

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.