Skip to content

Commit e5dff5b

Browse files
committed
Add Set::merge
1 parent c7b07a8 commit e5dff5b

File tree

4 files changed

+21
-7
lines changed

4 files changed

+21
-7
lines changed

src/ds/ds_set.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,18 @@ ds_set_t *ds_set_union(ds_set_t *set, ds_set_t *other)
247247
return ds_set_ex(ds_htable_merge(set->table, other->table));
248248
}
249249

250+
ds_set_t *ds_set_merge(ds_set_t *set, zval *values)
251+
{
252+
if (values && (ds_is_array(values) || ds_is_traversable(values))) {
253+
ds_set_t *merged = ds_set_clone(set);
254+
ds_set_add_all(merged, values);
255+
return merged;
256+
}
257+
258+
ARRAY_OR_TRAVERSABLE_REQUIRED();
259+
return NULL;
260+
}
261+
250262
void ds_set_assign_union(ds_set_t *set, ds_set_t *other)
251263
{
252264
zval *value;

src/ds/ds_set.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ ds_set_t *ds_set_diff(ds_set_t *set, ds_set_t *other);
5757
ds_set_t *ds_set_intersect(ds_set_t *set, ds_set_t *other);
5858
ds_set_t *ds_set_xor(ds_set_t *set, ds_set_t *other);
5959
ds_set_t *ds_set_union(ds_set_t *set, ds_set_t *other);
60+
ds_set_t *ds_set_merge(ds_set_t *set, zval *values);
6061

6162
void ds_set_assign_diff(ds_set_t *set, ds_set_t *other);
6263
void ds_set_assign_intersect(ds_set_t *set, ds_set_t *other);

src/php/classes/php_set_ce.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ METHOD(last)
113113
RETURN_ZVAL_COPY(ds_set_get_last(THIS_DS_SET()));
114114
}
115115

116+
ARGINFO_ZVAL_RETURN_DS(merge, values, Set)
117+
METHOD(merge)
118+
{
119+
PARSE_ZVAL(values);
120+
RETURN_DS_SET(ds_set_merge(THIS_DS_SET(), values));
121+
}
122+
116123
ARGINFO_DS_RETURN_DS(union, set, Set, Set)
117124
METHOD(union)
118125
{
@@ -254,6 +261,7 @@ void php_ds_register_set()
254261
PHP_DS_ME(Set, intersect)
255262
PHP_DS_ME(Set, join)
256263
PHP_DS_ME(Set, last)
264+
PHP_DS_ME(Set, merge)
257265
PHP_DS_ME(Set, reduce)
258266
PHP_DS_ME(Set, remove)
259267
PHP_DS_ME(Set, reverse)

src/php/classes/php_vector_ce.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -257,20 +257,13 @@ METHOD(unshift)
257257
ds_vector_unshift_va(THIS_DS_VECTOR(), argc, argv);
258258
}
259259

260-
ARGINFO_ZVAL(
261-
push_one, value
262-
);
263-
264260
void php_ds_register_vector()
265261
{
266262
zend_class_entry ce;
267263

268264
zend_function_entry methods[] = {
269265
SEQUENCE_ME_LIST(Vector)
270266
PHP_DS_COLLECTION_ME_LIST(Vector)
271-
272-
PHP_ME(Vector, push_one, arginfo_push_one, ZEND_ACC_PUBLIC)
273-
274267
PHP_FE_END
275268
};
276269

0 commit comments

Comments
 (0)