Refactor code.

This commit is contained in:
CismonX 2018-09-02 21:46:01 +08:00
parent 08928ceb40
commit 0b5b7f1271
1 changed files with 25 additions and 20 deletions

View File

@ -254,30 +254,30 @@ static int bucket_reverse_compare_string_cs(const void* op1, const void* op2)
static int bucket_compare_natural_ci(const void* op1, const void* op2)
{
zval* v1 = &((Bucket*)op1)->val;
zval* v2 = &((Bucket*)op2)->val;
return strnatcmp_ex(Z_STRVAL_P(v1), Z_STRLEN_P(v1), Z_STRVAL_P(v2), Z_STRLEN_P(v2), 1);
zend_string* s1 = Z_STR(((Bucket*)op1)->val);
zend_string* s2 = Z_STR(((Bucket*)op2)->val);
return strnatcmp_ex(ZSTR_VAL(s1), ZSTR_LEN(s1), ZSTR_VAL(s2), ZSTR_LEN(s2), 1);
}
static int bucket_reverse_compare_natural_ci(const void* op1, const void* op2)
{
zval* v1 = &((Bucket*)op1)->val;
zval* v2 = &((Bucket*)op2)->val;
return strnatcmp_ex(Z_STRVAL_P(v2), Z_STRLEN_P(v2), Z_STRVAL_P(v1), Z_STRLEN_P(v1), 1);
zend_string* s1 = Z_STR(((Bucket*)op1)->val);
zend_string* s2 = Z_STR(((Bucket*)op2)->val);
return strnatcmp_ex(ZSTR_VAL(s2), ZSTR_LEN(s2), ZSTR_VAL(s1), ZSTR_LEN(s1), 1);
}
static int bucket_compare_natural_cs(const void* op1, const void* op2)
{
zval* v1 = &((Bucket*)op1)->val;
zval* v2 = &((Bucket*)op2)->val;
return strnatcmp_ex(Z_STRVAL_P(v1), Z_STRLEN_P(v1), Z_STRVAL_P(v2), Z_STRLEN_P(v2), 0);
zend_string* s1 = Z_STR(((Bucket*)op1)->val);
zend_string* s2 = Z_STR(((Bucket*)op2)->val);
return strnatcmp_ex(ZSTR_VAL(s1), ZSTR_LEN(s1), ZSTR_VAL(s2), ZSTR_LEN(s2), 0);
}
static int bucket_reverse_compare_natural_cs(const void* op1, const void* op2)
{
zval* v1 = &((Bucket*)op1)->val;
zval* v2 = &((Bucket*)op2)->val;
return strnatcmp_ex(Z_STRVAL_P(v2), Z_STRLEN_P(v2), Z_STRVAL_P(v1), Z_STRLEN_P(v1), 0);
zend_string* s1 = Z_STR(((Bucket*)op1)->val);
zend_string* s2 = Z_STR(((Bucket*)op2)->val);
return strnatcmp_ex(ZSTR_VAL(s2), ZSTR_LEN(s2), ZSTR_VAL(s1), ZSTR_LEN(s1), 0);
}
static int bucket_compare_regular(const void* op1, const void* op2)
@ -939,7 +939,8 @@ PHP_METHOD(Collection, copyOf)
ARRAY_NEW(new_collection, 0);
RETURN_NEW_COLLECTION(new_collection);
}
ARRAY_NEW_EX(new_collection, current);
uint32_t num_elements = zend_hash_num_elements(current);
ARRAY_NEW(new_collection, new_size < num_elements ? new_size : num_elements);
ZEND_HASH_FOREACH_BUCKET(current, Bucket* bucket)
if (bucket->key)
{
@ -1219,7 +1220,7 @@ PHP_METHOD(Collection, filter)
ZEND_PARSE_PARAMETERS_END();
INIT_FCI(&fci, 2);
zend_array* current = COLLECTION_FETCH_CURRENT();
ARRAY_NEW_EX(new_collection, current);
ARRAY_NEW(new_collection, 8);
zend_bool packed = HT_IS_PACKED(current);
ZEND_HASH_FOREACH_BUCKET(current, Bucket* bucket)
CALLBACK_KEYVAL_INVOKE(params, bucket);
@ -1252,7 +1253,7 @@ PHP_METHOD(Collection, filterNot)
ZEND_PARSE_PARAMETERS_END();
INIT_FCI(&fci, 2);
zend_array* current = COLLECTION_FETCH_CURRENT();
ARRAY_NEW_EX(new_collection, current);
ARRAY_NEW(new_collection, 8);
zend_bool packed = HT_IS_PACKED(current);
ZEND_HASH_FOREACH_BUCKET(current, Bucket* bucket)
CALLBACK_KEYVAL_INVOKE(params, bucket);
@ -2112,8 +2113,8 @@ PHP_METHOD(Collection, partition)
INIT_FCI(&fci, 2);
zend_array* current = COLLECTION_FETCH_CURRENT();
zend_object* pair = create_pair_obj();
ARRAY_NEW_EX(first_arr, current);
ARRAY_NEW_EX(second_arr, current);
ARRAY_NEW(first_arr, 8);
ARRAY_NEW(second_arr, 8);
zend_bool packed = HT_IS_PACKED(current);
ZEND_HASH_FOREACH_BUCKET(current, Bucket* bucket)
CALLBACK_KEYVAL_INVOKE(params, bucket);
@ -2533,7 +2534,7 @@ PHP_METHOD(Collection, slice)
ZEND_PARSE_PARAMETERS_END();
ELEMENTS_VALIDATE(elements, ERR_BAD_ARGUMENT_TYPE, return);
zend_array* current = COLLECTION_FETCH_CURRENT();
ARRAY_NEW_EX(sliced, current);
ARRAY_NEW_EX(sliced, elements_arr);
ZEND_HASH_FOREACH_VAL(elements_arr, zval* val)
if (Z_TYPE_P(val) == IS_LONG)
{
@ -2553,6 +2554,10 @@ PHP_METHOD(Collection, slice)
zend_hash_add(sliced, Z_STR_P(val), found);
}
}
else
{
ERR_BAD_KEY_TYPE();
}
ZEND_HASH_FOREACH_END();
RETVAL_NEW_COLLECTION(sliced);
}
@ -2958,7 +2963,7 @@ PHP_METHOD(Collection, takeLastWhile)
ZEND_PARSE_PARAMETERS_END();
INIT_FCI(&fci, 2);
zend_array* current = COLLECTION_FETCH_CURRENT();
ARRAY_NEW_EX(new_collection, current);
ARRAY_NEW(new_collection, 8);
zend_bool packed = HT_IS_PACKED(current);
uint32_t num_elements = zend_hash_num_elements(current);
Bucket** taken = (Bucket**)malloc(num_elements * sizeof(Bucket*));
@ -3010,7 +3015,7 @@ PHP_METHOD(Collection, takeWhile)
ZEND_PARSE_PARAMETERS_END();
INIT_FCI(&fci, 2);
zend_array* current = COLLECTION_FETCH_CURRENT();
ARRAY_NEW_EX(new_collection, current);
ARRAY_NEW(new_collection, 8);
zend_bool packed = HT_IS_PACKED(current);
ZEND_HASH_FOREACH_BUCKET(current, Bucket* bucket)
CALLBACK_KEYVAL_INVOKE(params, bucket);