Exemple #1
0
PHP_METHOD(Test_NativeArray, testArray16) {

	zval *a;

	ZEPHIR_MM_GROW();

	ZEPHIR_INIT_VAR(a);
	array_init_size(a, 5);
	add_assoc_double_ex(a, SS("hello1"), 1.0);
	add_assoc_double_ex(a, SS("hello2"), 2.0);
	add_assoc_double_ex(a, SS("hello3"), 3.0);
	RETURN_CCTOR(a);

}
Exemple #2
0
PHP_METHOD(Test_NativeArray, testArray16) {

	zval a;
	zval *this_ptr = getThis();

	ZVAL_UNDEF(&a);

	ZEPHIR_MM_GROW();

	ZEPHIR_INIT_VAR(&a);
	zephir_create_array(&a, 3, 0 TSRMLS_CC);
	add_assoc_double_ex(&a, SL("hello1"), 1.0);
	add_assoc_double_ex(&a, SL("hello2"), 2.0);
	add_assoc_double_ex(&a, SL("hello3"), 3.0);
	RETURN_CCTOR(&a);

}
Exemple #3
0
bool ssdb_geo_get(
		SSDBSock *ssdb_sock,
		char *key,
		int key_len,
		char *member_key,
		int member_key_len,
		INTERNAL_FUNCTION_PARAMETERS) {
	double latlong[2] = {0};
	if (!ssdb_geo_member(ssdb_sock, key, key_len, member_key, member_key_len, (double *)latlong)) {
		return false;
	}

	array_init(return_value);
	add_assoc_double_ex(return_value, ZEND_STRS("latitude"),  latlong[0]);
	add_assoc_double_ex(return_value, ZEND_STRS("longitude"), latlong[1]);

	return true;
}
Exemple #4
0
static void php_swoole_table_row2array(swTable *table, swTableRow *row, zval *return_value)
{
    array_init(return_value);

    swTableColumn *col = NULL;
    swTable_string_length_t vlen = 0;
    double dval = 0;
    int64_t lval = 0;
    char *k;

    sw_spinlock(&row->lock);
    while(1)
    {
        col = swHashMap_each(table->columns, &k);
        if (col == NULL)
        {
            break;
        }
        if (col->type == SW_TABLE_STRING)
        {
            memcpy(&vlen, row->data + col->index, sizeof(swTable_string_length_t));
            sw_add_assoc_stringl_ex(return_value, col->name->str, col->name->length + 1, row->data + col->index + sizeof(swTable_string_length_t), vlen, 1);
        }
        else if (col->type == SW_TABLE_FLOAT)
        {
            memcpy(&dval, row->data + col->index, sizeof(dval));
            add_assoc_double_ex(return_value, col->name->str, col->name->length + 1, dval);
        }
        else
        {
            switch (col->type)
            {
            case SW_TABLE_INT8:
                memcpy(&lval, row->data + col->index, 1);
                add_assoc_long_ex(return_value, col->name->str, col->name->length + 1, (int8_t) lval);
                break;
            case SW_TABLE_INT16:
                memcpy(&lval, row->data + col->index, 2);
                add_assoc_long_ex(return_value, col->name->str, col->name->length + 1, (int16_t) lval);
                break;
            case SW_TABLE_INT32:
                memcpy(&lval, row->data + col->index, 4);
                add_assoc_long_ex(return_value, col->name->str, col->name->length + 1, (int32_t) lval);
                break;
            default:
                memcpy(&lval, row->data + col->index, 8);
                add_assoc_long_ex(return_value, col->name->str, col->name->length + 1, lval);
                break;
            }
        }
    }
    sw_spinlock_release(&row->lock);
}
Exemple #5
0
static void pcntl_sigwaitinfo(INTERNAL_FUNCTION_PARAMETERS, int timedwait) /* {{{ */
{
    zval            *user_set, **user_signo, *user_siginfo = NULL;
    long             tv_sec = 0, tv_nsec = 0;
    sigset_t         set;
    HashPosition     pos;
    int              signo;
    siginfo_t        siginfo;
    struct timespec  timeout;

    if (timedwait) {
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|zll", &user_set, &user_siginfo, &tv_sec, &tv_nsec) == FAILURE) {
            return;
        }
    } else {
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|z", &user_set, &user_siginfo) == FAILURE) {
            return;
        }
    }

    if (sigemptyset(&set) != 0) {
        PCNTL_G(last_error) = errno;
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
        RETURN_FALSE;
    }

    zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(user_set), &pos);
    while (zend_hash_get_current_data_ex(Z_ARRVAL_P(user_set), (void **)&user_signo, &pos) == SUCCESS)
    {
        if (Z_TYPE_PP(user_signo) != IS_LONG) {
            SEPARATE_ZVAL(user_signo);
            convert_to_long_ex(user_signo);
        }
        signo = Z_LVAL_PP(user_signo);
        if (sigaddset(&set, signo) != 0) {
            PCNTL_G(last_error) = errno;
            php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
            RETURN_FALSE;
        }
        zend_hash_move_forward_ex(Z_ARRVAL_P(user_set), &pos);
    }

    if (timedwait) {
        timeout.tv_sec  = (time_t) tv_sec;
        timeout.tv_nsec = tv_nsec;
        signo = sigtimedwait(&set, &siginfo, &timeout);
    } else {
        signo = sigwaitinfo(&set, &siginfo);
    }
    if (signo == -1 && errno != EAGAIN) {
        PCNTL_G(last_error) = errno;
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
    }

    /*
     * sigtimedwait and sigwaitinfo can return 0 on success on some
     * platforms, e.g. NetBSD
     */
    if (!signo && siginfo.si_signo) {
        signo = siginfo.si_signo;
    }

    if (signo > 0 && user_siginfo) {
        if (Z_TYPE_P(user_siginfo) != IS_ARRAY) {
            zval_dtor(user_siginfo);
            array_init(user_siginfo);
        } else {
            zend_hash_clean(Z_ARRVAL_P(user_siginfo));
        }
        add_assoc_long_ex(user_siginfo, "signo", sizeof("signo"), siginfo.si_signo);
        add_assoc_long_ex(user_siginfo, "errno", sizeof("errno"), siginfo.si_errno);
        add_assoc_long_ex(user_siginfo, "code",  sizeof("code"),  siginfo.si_code);
        switch(signo) {
#ifdef SIGCHLD
        case SIGCHLD:
            add_assoc_long_ex(user_siginfo,   "status", sizeof("status"), siginfo.si_status);
# ifdef si_utime
            add_assoc_double_ex(user_siginfo, "utime",  sizeof("utime"),  siginfo.si_utime);
# endif
# ifdef si_stime
            add_assoc_double_ex(user_siginfo, "stime",  sizeof("stime"),  siginfo.si_stime);
# endif
            add_assoc_long_ex(user_siginfo,   "pid",    sizeof("pid"),    siginfo.si_pid);
            add_assoc_long_ex(user_siginfo,   "uid",    sizeof("uid"),    siginfo.si_uid);
            break;
#endif
        case SIGILL:
        case SIGFPE:
        case SIGSEGV:
        case SIGBUS:
            add_assoc_double_ex(user_siginfo, "addr", sizeof("addr"), (long)siginfo.si_addr);
            break;
#ifdef SIGPOLL
        case SIGPOLL:
            add_assoc_long_ex(user_siginfo, "band", sizeof("band"), siginfo.si_band);
# ifdef si_fd
            add_assoc_long_ex(user_siginfo, "fd",   sizeof("fd"),   siginfo.si_fd);
# endif
            break;
#endif
            EMPTY_SWITCH_DEFAULT_CASE();
        }
    }

    RETURN_LONG(signo);
}
Exemple #6
0
PHP_METHOD(Test_Fasta, main) {

	int ZEPHIR_LAST_CALL_STATUS;
	zval *_0;
	zval *n, *alu = NULL, *iub, *homoSap, *_1;

	ZEPHIR_MM_GROW();
	zephir_fetch_params(1, 1, 0, &n);



	ZEPHIR_INIT_VAR(_0);
	ZEPHIR_CONCAT_SSSSSSS(_0, "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG", "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA", "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT", "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA", "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG", "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC", "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA");
	ZEPHIR_CPY_WRT(alu, _0);
	ZEPHIR_INIT_VAR(iub);
	zephir_create_array(iub, 15, 0 TSRMLS_CC);
	add_assoc_double_ex(iub, SS("a"), 0.27);
	add_assoc_double_ex(iub, SS("c"), 0.12);
	add_assoc_double_ex(iub, SS("g"), 0.12);
	add_assoc_double_ex(iub, SS("t"), 0.27);
	add_assoc_double_ex(iub, SS("B"), 0.02);
	add_assoc_double_ex(iub, SS("D"), 0.02);
	add_assoc_double_ex(iub, SS("H"), 0.02);
	add_assoc_double_ex(iub, SS("K"), 0.02);
	add_assoc_double_ex(iub, SS("M"), 0.02);
	add_assoc_double_ex(iub, SS("N"), 0.02);
	add_assoc_double_ex(iub, SS("R"), 0.02);
	add_assoc_double_ex(iub, SS("S"), 0.02);
	add_assoc_double_ex(iub, SS("V"), 0.02);
	add_assoc_double_ex(iub, SS("W"), 0.02);
	add_assoc_double_ex(iub, SS("Y"), 0.02);
	ZEPHIR_INIT_VAR(homoSap);
	zephir_create_array(homoSap, 4, 0 TSRMLS_CC);
	add_assoc_double_ex(homoSap, SS("a"), 0.3029549426680);
	add_assoc_double_ex(homoSap, SS("c"), 0.1979883004921);
	add_assoc_double_ex(homoSap, SS("g"), 0.1975473066391);
	add_assoc_double_ex(homoSap, SS("t"), 0.3015094502008);
	php_printf("%s", ">ONE H**o sapiens alu");
	ZEPHIR_INIT_VAR(_1);
	ZVAL_LONG(_1, (2 * zephir_get_numberval(n)));
	ZEPHIR_CALL_METHOD(NULL, this_ptr, "fastarepeat", NULL, 0, _1, alu);
	zephir_check_call_status();
	ZEPHIR_MM_RESTORE();

}
Exemple #7
0
bool ssdb_geo_neighbours(
		SSDBSock *ssdb_sock, char *key,
		int key_len,
		char *member_key,
		int member_key_len,
		double radius_meters,
		long return_limit,
		long offset_limit,
		long zscan_limit,
		INTERNAL_FUNCTION_PARAMETERS) {
	double latlong[2] = {0};
	if (!ssdb_geo_member(ssdb_sock, key, key_len, member_key, member_key_len, (double *)latlong)) {
		return false;
	}

	SSDBGeoObj *ssdb_geo_obj = emalloc(sizeof(SSDBGeoObj));

	ssdb_geo_obj->ssdb_sock      = ssdb_sock;
	ssdb_geo_obj->key            = key;
	ssdb_geo_obj->key_len        = key_len;
	ssdb_geo_obj->member_key     = member_key;
	ssdb_geo_obj->member_key_len = member_key_len;
	ssdb_geo_obj->limit_str      = NULL;
	ssdb_geo_obj->limit_str_len  = spprintf(&ssdb_geo_obj->limit_str, 0, "%ld", zscan_limit);

	GeoHashRadius georadius = geohashGetAreasByRadiusWGS84(latlong[0], latlong[1], radius_meters);
	SSDBGeoList *l = ssdb_geo_members(ssdb_geo_obj, georadius, latlong[0], latlong[1], radius_meters);

	efree(ssdb_geo_obj->limit_str);
	efree(ssdb_geo_obj);
	if (l == NULL) {
		return false;
	}

	return_limit = return_limit <= 0 ? l->num : return_limit;

	int i = 0;
	SSDBGeoPoint *p_l = malloc(sizeof(SSDBGeoPoint) * l->num);
	SSDBGeoPoint *p;
	SSDBGeoNode *n = l->head;
	while (n != NULL) {
		p = (SSDBGeoPoint *)n->data;

		p_l[i].member    = p->member;
		p_l[i].latitude  = p->latitude;
		p_l[i].longitude = p->longitude;
		p_l[i].dist      = p->dist;

		n = n->next;
		i++;
	}

	qsort(p_l, l->num, sizeof(SSDBGeoPoint), ssdb_geo_point_sort_asc);

	zval *temp;
	int return_num = 0;
	array_init(return_value);
	offset_limit = offset_limit < 0 ? 0 : offset_limit; 
	for (i = 0; i < l->num; i++) {
		if (i >= offset_limit && return_num < return_limit) {
			MAKE_STD_ZVAL(temp);
			array_init_size(temp, 3);
			add_assoc_double_ex(temp, ZEND_STRS("latitude"),  p_l[i].latitude);
			add_assoc_double_ex(temp, ZEND_STRS("longitude"), p_l[i].longitude);
			add_assoc_double_ex(temp, ZEND_STRS("distance"),  p_l[i].dist);
			add_assoc_zval(return_value, p_l[i].member, temp);
			return_num++;
		}
		efree(p_l[i].member);
	}

	free(p_l);
	ssdb_geo_list_destory(l);

	return true;
}