/**
Copyright (c) 2012-2014 Microsoft Corporation
   
Module Name:

    FiniteDomainNum.java

Abstract:

Author:

    @author Christoph Wintersteiger (cwinter) 2015-12-02

Notes:
    
**/ 

package com.microsoft.z3;

import java.math.BigInteger;

/**
 * Finite-domain Numerals
 **/
public class FiniteDomainNum<R> extends FiniteDomainExpr<R>
{

    FiniteDomainNum(Context ctx, long obj)
    {
        super(ctx, obj);
    }

    /**
     * Retrieve the int value.
     **/
    public int getInt()
    {
        Native.IntPtr res = new Native.IntPtr();
        if (!Native.getNumeralInt(getContext().nCtx(), getNativeObject(), res)) {
            throw new Z3Exception("Numeral is not an int");
        }
        return res.value;
    }

    /**
     * Retrieve the 64-bit int value.
     **/
    public long getInt64()
    {
        Native.LongPtr res = new Native.LongPtr();
        if (!Native.getNumeralInt64(getContext().nCtx(), getNativeObject(), res)) {
            throw new Z3Exception("Numeral is not an int64");
        }
        return res.value;
    }

    /**
     * Retrieve the BigInteger value.
     **/
    public BigInteger getBigInteger()
    {
        return new BigInteger(this.toString());
    }

    /**
     * Returns a string representation of the numeral.
     **/
    @Override
    public String toString()
    {
        return Native.getNumeralString(getContext().nCtx(), getNativeObject());
    }
}
