32 VARIANT* out_elements,
33 ULONG* out_elements_received) {
38 ULONG available_count =
static_cast<ULONG>(items_.size()) - current_index_;
39 ULONG count = std::min(requested_count, available_count);
41 out_elements[
i] = items_[current_index_ +
i].Copy();
42 current_index_ += count;
46 if (out_elements_received)
47 *out_elements_received = count;
49 return (count == requested_count ? S_OK : S_FALSE);
67 if (!out_cloned_object)
70 size_t count = items_.size();
71 Microsoft::WRL::ComPtr<EnumVariant> other =
72 Microsoft::WRL::Make<EnumVariant>(
static_cast<ULONG>(count));
73 for (
size_t i = 0;
i < count; ++
i)
74 other->items_[
i] =
static_cast<const VARIANT&
>(items_[
i]);
76 other->Skip(current_index_);
77 return other.CopyTo(IID_PPV_ARGS(out_cloned_object));