bool Sort::isParametricDatatype() const
{
if (!d_type->isDatatype()) return false;
- DatatypeType* type = static_cast<DatatypeType*>(d_type.get());
- return type->isParametric();
+ return DatatypeType(*d_type).isParametric();
}
bool Sort::isFunction() const { return d_type->isFunction(); }
Datatype Sort::getDatatype() const
{
CVC4_API_CHECK(isDatatype()) << "Expected datatype sort.";
- DatatypeType* type = static_cast<DatatypeType*>(d_type.get());
- return type->getDatatype();
+ return DatatypeType(*d_type).getDatatype();
}
Sort Sort::instantiate(const std::vector<Sort>& params) const
}
if (d_type->isDatatype())
{
- DatatypeType* type = static_cast<DatatypeType*>(d_type.get());
- return type->instantiate(tparams);
+ return DatatypeType(*d_type).instantiate(tparams);
}
Assert(d_type->isSortConstructor());
- return static_cast<SortConstructorType*>(d_type.get())->instantiate(tparams);
+ return SortConstructorType(*d_type).instantiate(tparams);
}
std::string Sort::toString() const { return d_type->toString(); }
size_t Sort::getFunctionArity() const
{
CVC4_API_CHECK(isFunction()) << "Not a function sort.";
- return static_cast<FunctionType*>(d_type.get())->getArity();
+ return FunctionType(*d_type).getArity();
}
std::vector<Sort> Sort::getFunctionDomainSorts() const
{
CVC4_API_CHECK(isFunction()) << "Not a function sort.";
- std::vector<CVC4::Type> types =
- static_cast<FunctionType*>(d_type.get())->getArgTypes();
+ std::vector<CVC4::Type> types = FunctionType(*d_type).getArgTypes();
return typeVectorToSorts(types);
}
Sort Sort::getFunctionCodomainSort() const
{
CVC4_API_CHECK(isFunction()) << "Not a function sort.";
- return static_cast<FunctionType*>(d_type.get())->getRangeType();
+ return FunctionType(*d_type).getRangeType();
}
/* Array sort ---------------------------------------------------------- */
Sort Sort::getArrayIndexSort() const
{
CVC4_API_CHECK(isArray()) << "Not an array sort.";
- return static_cast<ArrayType*>(d_type.get())->getIndexType();
+ return ArrayType(*d_type).getIndexType();
}
Sort Sort::getArrayElementSort() const
{
CVC4_API_CHECK(isArray()) << "Not an array sort.";
- return static_cast<ArrayType*>(d_type.get())->getConstituentType();
+ return ArrayType(*d_type).getConstituentType();
}
/* Set sort ------------------------------------------------------------ */
Sort Sort::getSetElementSort() const
{
CVC4_API_CHECK(isSet()) << "Not a set sort.";
- return static_cast<SetType*>(d_type.get())->getElementType();
+ return SetType(*d_type).getElementType();
}
/* Uninterpreted sort -------------------------------------------------- */
std::string Sort::getUninterpretedSortName() const
{
CVC4_API_CHECK(isUninterpretedSort()) << "Not an uninterpreted sort.";
- return static_cast<SortType*>(d_type.get())->getName();
+ return SortType(*d_type).getName();
}
bool Sort::isUninterpretedSortParameterized() const
{
CVC4_API_CHECK(isUninterpretedSort()) << "Not an uninterpreted sort.";
- return static_cast<SortType*>(d_type.get())->isParameterized();
+ return SortType(*d_type).isParameterized();
}
std::vector<Sort> Sort::getUninterpretedSortParamSorts() const
{
CVC4_API_CHECK(isUninterpretedSort()) << "Not an uninterpreted sort.";
- std::vector<CVC4::Type> types =
- static_cast<SortType*>(d_type.get())->getParamTypes();
+ std::vector<CVC4::Type> types = SortType(*d_type).getParamTypes();
return typeVectorToSorts(types);
}
std::string Sort::getSortConstructorName() const
{
CVC4_API_CHECK(isSortConstructor()) << "Not a sort constructor sort.";
- return static_cast<SortConstructorType*>(d_type.get())->getName();
+ return SortConstructorType(*d_type).getName();
}
size_t Sort::getSortConstructorArity() const
{
CVC4_API_CHECK(isSortConstructor()) << "Not a sort constructor sort.";
- return static_cast<SortConstructorType*>(d_type.get())->getArity();
+ return SortConstructorType(*d_type).getArity();
}
/* Bit-vector sort ----------------------------------------------------- */
uint32_t Sort::getBVSize() const
{
CVC4_API_CHECK(isBitVector()) << "Not a bit-vector sort.";
- return static_cast<BitVectorType*>(d_type.get())->getSize();
+ return BitVectorType(*d_type).getSize();
}
/* Floating-point sort ------------------------------------------------- */
uint32_t Sort::getFPExponentSize() const
{
CVC4_API_CHECK(isFloatingPoint()) << "Not a floating-point sort.";
- return static_cast<FloatingPointType*>(d_type.get())->getExponentSize();
+ return FloatingPointType(*d_type).getExponentSize();
}
uint32_t Sort::getFPSignificandSize() const
{
CVC4_API_CHECK(isFloatingPoint()) << "Not a floating-point sort.";
- return static_cast<FloatingPointType*>(d_type.get())->getSignificandSize();
+ return FloatingPointType(*d_type).getSignificandSize();
}
/* Datatype sort ------------------------------------------------------- */
std::vector<Sort> Sort::getDatatypeParamSorts() const
{
CVC4_API_CHECK(isParametricDatatype()) << "Not a parametric datatype sort.";
- std::vector<CVC4::Type> types =
- static_cast<DatatypeType*>(d_type.get())->getParamTypes();
+ std::vector<CVC4::Type> types = DatatypeType(*d_type).getParamTypes();
return typeVectorToSorts(types);
}
size_t Sort::getDatatypeArity() const
{
CVC4_API_CHECK(isDatatype()) << "Not a datatype sort.";
- return static_cast<DatatypeType*>(d_type.get())->getArity();
+ return DatatypeType(*d_type).getArity();
}
/* Tuple sort ---------------------------------------------------------- */
size_t Sort::getTupleLength() const
{
CVC4_API_CHECK(isTuple()) << "Not a tuple sort.";
- return static_cast<DatatypeType*>(d_type.get())->getTupleLength();
+ return DatatypeType(*d_type).getTupleLength();
}
std::vector<Sort> Sort::getTupleSorts() const
{
CVC4_API_CHECK(isTuple()) << "Not a tuple sort.";
- std::vector<CVC4::Type> types =
- static_cast<DatatypeType*>(d_type.get())->getTupleTypes();
+ std::vector<CVC4::Type> types = DatatypeType(*d_type).getTupleTypes();
return typeVectorToSorts(types);
}