static Variant HHVM_FUNCTION(gmp_gcdext, const Variant& dataA, const Variant& dataB) { mpz_t gmpDataA, gmpDataB, gmpReturnG, gmpReturnS, gmpReturnT; if (!variantToGMPData(cs_GMP_FUNC_NAME_GMP_GCDEXCT, gmpDataA, dataA)) { return false; } if (!variantToGMPData(cs_GMP_FUNC_NAME_GMP_GCDEXCT, gmpDataB, dataB)) { mpz_clear(gmpDataA); return false; } mpz_init(gmpReturnG); mpz_init(gmpReturnS); mpz_init(gmpReturnT); mpz_gcdext(gmpReturnG, gmpReturnS, gmpReturnT, gmpDataA, gmpDataB); ArrayInit returnArray(3, ArrayInit::Map{}); returnArray.set(s_gmp_g, NEWOBJ(GMPResource)(gmpReturnG)); returnArray.set(s_gmp_s, NEWOBJ(GMPResource)(gmpReturnS)); returnArray.set(s_gmp_t, NEWOBJ(GMPResource)(gmpReturnT)); mpz_clear(gmpDataA); mpz_clear(gmpDataB); mpz_clear(gmpReturnG); mpz_clear(gmpReturnS); mpz_clear(gmpReturnT); return returnArray.toVariant(); }
static Variant HHVM_FUNCTION(gmp_sqrtrem, const Variant& data) { mpz_t gmpData, gmpSquareRoot, gmpRemainder; if (!variantToGMPData(cs_GMP_FUNC_NAME_GMP_SQRTREM, gmpData, data)) { return false; } if (mpz_sgn(gmpData) < 0) { raise_warning(cs_GMP_INVALID_NUMBER_IS_NEGATIVE, cs_GMP_FUNC_NAME_GMP_SQRTREM); return false; } mpz_init(gmpSquareRoot); mpz_init(gmpRemainder); mpz_sqrtrem(gmpSquareRoot, gmpRemainder, gmpData); ArrayInit returnArray(2, ArrayInit::Map{}); returnArray.set(0, NEWOBJ(GMPResource)(gmpSquareRoot)); returnArray.set(1, NEWOBJ(GMPResource)(gmpRemainder)); mpz_clear(gmpData); mpz_clear(gmpSquareRoot); mpz_clear(gmpRemainder); return returnArray.toVariant(); }
static Variant HHVM_FUNCTION(gmp_div_qr, const Variant& dataA, const Variant& dataB, int64_t round = GMP_ROUND_ZERO) { mpz_t gmpDataA, gmpDataB, gmpReturnQ, gmpReturnR; if (!variantToGMPData(cs_GMP_FUNC_NAME_GMP_DIV_QR, gmpDataA, dataA)) { return false; } if (!variantToGMPData(cs_GMP_FUNC_NAME_GMP_DIV_QR, gmpDataB, dataB)) { mpz_clear(gmpDataA); return false; } if (mpz_sgn(gmpDataB) == 0) { mpz_clear(gmpDataA); mpz_clear(gmpDataB); raise_warning(cs_GMP_INVALID_VALUE_MUST_NOT_BE_ZERO, cs_GMP_FUNC_NAME_GMP_DIV_QR); return false; } mpz_init(gmpReturnQ); mpz_init(gmpReturnR); switch (round) { case GMP_ROUND_ZERO: mpz_tdiv_qr(gmpReturnQ, gmpReturnR, gmpDataA, gmpDataB); break; case GMP_ROUND_PLUSINF: mpz_cdiv_qr(gmpReturnQ, gmpReturnR, gmpDataA, gmpDataB); break; case GMP_ROUND_MINUSINF: mpz_fdiv_qr(gmpReturnQ, gmpReturnR, gmpDataA, gmpDataB); break; default: mpz_clear(gmpDataA); mpz_clear(gmpDataB); mpz_clear(gmpReturnQ); mpz_clear(gmpReturnR); return null_variant; } ArrayInit returnArray(2, ArrayInit::Map{}); returnArray.set(0, NEWOBJ(GMPResource)(gmpReturnQ)); returnArray.set(1, NEWOBJ(GMPResource)(gmpReturnR)); mpz_clear(gmpDataA); mpz_clear(gmpDataB); mpz_clear(gmpReturnQ); mpz_clear(gmpReturnR); return returnArray.toVariant(); }
int main() { char src[] = "what the f**k"; char dst[sizeof(src)]; printf("\nreturnArray2()\n"); returnArray2(src, sizeof(src), dst, sizeof(dst)); printf("returnArray()\n"); returnArray(src, sizeof(src), dst, sizeof(dst)); printf("dst[] = %s\n", dst); return 0; }
GrowingArray<QuadTreeDweller*> QuadTreeNode::GetTreeDwellersAboveAndUnder(int someTreeDwellerFlags) { GrowingArray<QuadTreeDweller*> returnArray(8192); GetTreeDwellersAboveAndUnder(returnArray,someTreeDwellerFlags); return returnArray; }