size_t DualWordArray::size() const { GADGETLIB_ASSERT(multipackedContents_.size() == numElements_, "Dual Variable multipacked contents size mismatch"); GADGETLIB_ASSERT(unpackedContents_.size() == numElements_, "Dual Variable packed contents size mismatch"); return numElements_; }
DualWordArray::DualWordArray(const MultiPackedWordArray& multipackedContents, // TODO delete, for dev const UnpackedWordArray& unpackedContents) : multipackedContents_(multipackedContents), unpackedContents_(unpackedContents), numElements_(multipackedContents_.size()) { GADGETLIB_ASSERT(multipackedContents_.size() == numElements_, "Dual Variable multipacked contents size mismatch"); GADGETLIB_ASSERT(unpackedContents_.size() == numElements_, "Dual Variable packed contents size mismatch"); }
PackedWordArray DualWordArray::packed() const { GADGETLIB_ASSERT(numElements_ == multipackedContents_.size(), "multipacked contents size mismatch") PackedWordArray retval(numElements_); for(size_t i = 0; i < numElements_; ++i) { const auto element = multipackedContents_[i]; GADGETLIB_ASSERT(element.size() == 1, "Cannot convert from multipacked to packed"); retval[i] = element[0]; } return retval; }
void FElem::promoteToFieldType(FieldType type) { if (!fieldMustBePromotedForArithmetic(this->fieldType(), type)) { return; } if(type == R1P) { const FConst* fConst = dynamic_cast<FConst*>(elem_.get()); GADGETLIB_ASSERT(fConst != NULL, "Cannot convert between specialized field types."); elem_.reset(new R1P_Elem(fConst->asLong())); } else { GADGETLIB_FATAL("Attempted to promote to unknown field type"); } }
Variable::Variable(const string& name) : index_(nextFreeIndex_++) { libff::UNUSED(name); GADGETLIB_ASSERT(nextFreeIndex_ > 0, GADGETLIB2_FMT("Variable index overflow has occured, maximum number of " "Variables is %lu", ULONG_MAX)); }
long R1P_Elem::asLong() const { GADGETLIB_ASSERT(elem_.as_ulong() <= LONG_MAX, "long overflow occured."); return long(elem_.as_ulong()); }