ISWbemObjectSet ISWbemObjectSet_iface;
LONG refs;
IEnumWbemClassObject *objectenum;
+ LONG count;
};
static inline struct objectset *impl_from_ISWbemObjectSet(
LONG *iCount )
{
struct objectset *objectset = impl_from_ISWbemObjectSet( iface );
- LONG count = 0, total = 0;
TRACE( "%p, %p\n", objectset, iCount );
- while (IEnumWbemClassObject_Skip( objectset->objectenum, WBEM_INFINITE, 1 ) == S_OK) count++;
-
- IEnumWbemClassObject_Reset( objectset->objectenum );
- while (IEnumWbemClassObject_Skip( objectset->objectenum, WBEM_INFINITE, 1 ) == S_OK) total++;
-
- count = total - count;
- IEnumWbemClassObject_Reset( objectset->objectenum );
- while (count--) IEnumWbemClassObject_Skip( objectset->objectenum, WBEM_INFINITE, 1 );
-
- *iCount = total;
+ *iCount = objectset->count;
return S_OK;
}
objectset_ItemIndex
};
+static LONG get_object_count( IEnumWbemClassObject *iter )
+{
+ LONG count = 0;
+ while (IEnumWbemClassObject_Skip( iter, WBEM_INFINITE, 1 ) == S_OK) count++;
+ IEnumWbemClassObject_Reset( iter );
+ return count;
+}
+
static HRESULT SWbemObjectSet_create( IEnumWbemClassObject *wbem_objectenum, ISWbemObjectSet **obj )
{
struct objectset *objectset;
objectset->refs = 1;
objectset->objectenum = wbem_objectenum;
IEnumWbemClassObject_AddRef( objectset->objectenum );
+ objectset->count = get_object_count( objectset->objectenum );
*obj = &objectset->ISWbemObjectSet_iface;
TRACE( "returning iface %p\n", *obj );