void List<T>::splice(ContextType ctx, ObjectType this_object, size_t argc, const ValueType arguments[], ReturnValue &return_value) { validate_argument_count_at_least(argc, 1); auto list = get_internal<T, ListClass<T>>(this_object); size_t size = list->size(); long index = std::min<long>(Value::to_number(ctx, arguments[0]), size); if (index < 0) { index = std::max<long>(size + index, 0); } size_t remove; if (argc < 2) { remove = size - index; } else { remove = std::max<long>(Value::to_number(ctx, arguments[1]), 0); remove = std::min<long>(remove, size - index); } std::vector<ValueType> removed_objects; removed_objects.reserve(remove); for (size_t i = 0; i < remove; i++) { auto realm_object = realm::Object(list->get_realm(), list->get_object_schema(), list->get(index)); removed_objects.push_back(RealmObject<T>::create_instance(ctx, realm_object)); list->remove(index); } for (size_t i = 2; i < argc; i++) { list->insert(ctx, arguments[i], index + i - 2); } return_value.set(Object::create_array(ctx, removed_objects)); }
void List<T>::unshift(ContextType ctx, ObjectType this_object, size_t argc, const ValueType arguments[], ReturnValue &return_value) { validate_argument_count_at_least(argc, 1); auto list = get_internal<T, ListClass<T>>(this_object); for (size_t i = 0; i < argc; i++) { list->insert(ctx, arguments[i], i); } return_value.set((uint32_t)list->size()); }
void ListClass<T>::unshift(ContextType ctx, FunctionType, ObjectType this_object, size_t argc, const ValueType arguments[], ReturnValue &return_value) { validate_argument_count_at_least(argc, 1); auto list = get_internal<T, ListClass<T>>(this_object); NativeAccessor<T> accessor(ctx, list->get_realm(), list->get_object_schema()); for (size_t i = 0; i < argc; i++) { list->insert(accessor, i, arguments[i]); } return_value.set((uint32_t)list->size()); }
void List<T>::filtered(ContextType ctx, ObjectType this_object, size_t argc, const ValueType arguments[], ReturnValue &return_value) { validate_argument_count_at_least(argc, 1); auto list = get_internal<T, ListClass<T>>(this_object); return_value.set(Results<T>::create_filtered(ctx, *list, argc, arguments)); }