code: /**
  Copyright (c) 2012-2014 Microsoft Corporation
     
  Module Name:
  
      Params.java
  
  Abstract:
  
  Author:
  
      @author Christoph Wintersteiger (cwinter) 2012-03-15
  
  Notes:
      
  **/ 
  
  
  package com.microsoft.z3;
  
  /**
   * A ParameterSet represents a configuration in the form of Symbol/value pairs.
   **/
  public class Params extends Z3Object {
      /**
       * Adds a parameter setting.
       **/
      public void add(Symbol name, boolean value)
      {
          Native.paramsSetBool(getContext().nCtx(), getNativeObject(),
                  name.getNativeObject(), (value));
      }
  
      /**
       * Adds a parameter setting.
       **/
      public void add(Symbol name, double value)
      {
          Native.paramsSetDouble(getContext().nCtx(), getNativeObject(),
                  name.getNativeObject(), value);
      }
      
      /**
       * Adds a parameter setting.
       **/
      public void add(Symbol name, String value)
      {
  
          Native.paramsSetSymbol(getContext().nCtx(), getNativeObject(),
                  name.getNativeObject(), 
                  getContext().mkSymbol(value).getNativeObject());
      }
  
      /**
       * Adds a parameter setting.
       **/
      public void add(Symbol name, Symbol value)
      {
  
          Native.paramsSetSymbol(getContext().nCtx(), getNativeObject(),
                  name.getNativeObject(), value.getNativeObject());
      }
  
      /**
       * Adds a parameter setting.
       **/
      public void add(String name, boolean value)
      {
          Native.paramsSetBool(getContext().nCtx(), getNativeObject(), 
                  getContext().mkSymbol(name).getNativeObject(), value);
      }
  
      /**
       * Adds a parameter setting.
       **/
      public void add(String name, int value)
      {
          Native.paramsSetUint(getContext().nCtx(), getNativeObject(), getContext()
                  .mkSymbol(name).getNativeObject(), value);
      }
  
      /**
       * Adds a parameter setting.
       **/
      public void add(String name, double value)
      {
          Native.paramsSetDouble(getContext().nCtx(), getNativeObject(), getContext()
                  .mkSymbol(name).getNativeObject(), value);
      }
  
      /**
       * Adds a parameter setting.
       **/
      public void add(String name, Symbol value)
      {
          Native.paramsSetSymbol(getContext().nCtx(), getNativeObject(), getContext()
                  .mkSymbol(name).getNativeObject(), value.getNativeObject());
      }
  
      /**
       * Adds a parameter setting.
       **/
      public void add(String name, String value)
      {
  
          Native.paramsSetSymbol(getContext().nCtx(), getNativeObject(),
                  getContext().mkSymbol(name).getNativeObject(),
                  getContext().mkSymbol(value).getNativeObject());
      }
      
      /**
       * A string representation of the parameter set.
       **/
      @Override
      public String toString()
      {
          return Native.paramsToString(getContext().nCtx(), getNativeObject());
      }
  
      Params(Context ctx)
      {
          super(ctx, Native.mkParams(ctx.nCtx()));
      }
  
  
      @Override
      void incRef() {
          Native.paramsIncRef(getContext().nCtx(), getNativeObject());
      }
  
      @Override
      void addToReferenceQueue() {
          getContext().getParamsDRQ().storeReference(getContext(), this);
      }
  }
  