int GetString(structlpsolvecaller *lpsolvecaller, pMatrix ppm, int element, char *buf, int size, int ShowError) { int size1; zval arg; ZVAL_UNDEF(&arg); if (ppm != NULL) { ErrMsgTxt(lpsolvecaller, "invalid vector."); } arg = GetpMatrix(lpsolvecaller, element); if ((!Z_ISUNDEF(arg)) && (Z_TYPE(arg) != IS_STRING)) { ZVAL_UNDEF(&arg); } if (Z_ISUNDEF(arg)) { if (ShowError) ErrMsgTxt(lpsolvecaller, "Expecting a character element"); return(FALSE); } size1 = Z_STRLEN(arg); if (size1 < size) size = size1; memcpy(buf, Z_STRVAL(arg), size); buf[size] = 0; return(TRUE); }
void Trans2DMatrix::EnsureDecomposedTransformsCached() { if (Scale==0) { GetpMatrix()->Decompose(&Scale, &Aspect, &Rotation, &Skew, &Translation, &ScaleY); Rotation = (Rotation*180)/PI; Skew = (Skew *180)/PI; // convert to degrees!? } }
Double GetRealScalar(structlpsolvecaller *lpsolvecaller, int element) { zval arg; ZVAL_UNDEF(&arg); Double a = 0.0; arg = GetpMatrix(lpsolvecaller, element); if ((!Z_ISUNDEF(arg)) && (Z_TYPE(arg) != IS_LONG) && (Z_TYPE(arg) != IS_DOUBLE)) { ZVAL_UNDEF(&arg); } if (Z_ISUNDEF(arg)) { abort(); ErrMsgTxt(lpsolvecaller, "Expecting a scalar argument."); } else { a = GetRealArg(lpsolvecaller, arg); } return(a); }
int GetRealSparseVector(structlpsolvecaller *lpsolvecaller, int element, Double *vec, int *index, int start, int len, int col) { int m, n, count = 0; zval pm = GetpMatrix(lpsolvecaller, element); zval *data; HashTable *arr_hash; Double a; zend_string *key; ulong i; if ((Z_ISUNDEF(pm)) || (Z_TYPE(pm) != IS_ARRAY)) { ErrMsgTxt(lpsolvecaller, "invalid vector."); } #if 1 m = GetM(lpsolvecaller, pm); n = GetN(lpsolvecaller, pm); #else m = zend_hash_num_elements(Z_ARRVAL_P(pm)); n = 1; #endif if ( ((col == 0) && (((m != 1) && (n != 1)) || ((m == 1) && (n > len)) || ((n == 1) && (m > len)))) || ((col != 0) && ((m > len) || (col > n))) /* || !IsNumeric(pm) || IsComplex(pm) */ ) { /* Printf("1: m=%d, n=%d, col=%d, len=%d, IsNumeric=%d, IsComplex=%d\n", m,n,col,len,IsNumeric(pm),IsComplex(pm)); */ ErrMsgTxt(lpsolvecaller, "invalid vector."); } if ((((n == 1) || (col != 0)) && (m > len)) || ((col == 0) && (m == 1) && (n > len))) { /* Printf("2: m=%d, n=%d, col=%d, len=%d\n", m,n,col,len); */ ErrMsgTxt(lpsolvecaller, "invalid vector."); } arr_hash = Z_ARRVAL(pm); ZEND_HASH_FOREACH_KEY_VAL(arr_hash, i, key, data) { if (key) { ErrMsgTxt(lpsolvecaller, "invalid vector."); } else { zval pm = *data; a = 0; if (Z_TYPE(pm) == IS_ARRAY) { zval *data; HashTable *arr_hash; zend_string *key; ulong i; arr_hash = Z_ARRVAL(pm); ZEND_HASH_FOREACH_KEY_VAL(arr_hash, i, key, data) { if (key) { ErrMsgTxt(lpsolvecaller, "invalid vector."); } else if (i + 1 == col) { a = GetRealArg(lpsolvecaller, *data); break; } } ZEND_HASH_FOREACH_END(); } else { a = GetRealArg(lpsolvecaller, pm); } if (a) { *(vec++) = a; *(index++) = start + i; count++; } }