void setClassMethods(CMPIConstClass *cls, XtokMethods *ms) { XtokMethod *nm = NULL,*m = ms ? ms->first : NULL; CMPIValue val; CMPIArray *arr = NULL; XtokQualifier *nq,*q; XtokQualifiers *qs; XtokParam *np,*p; XtokParams *ps; int rc, n; val.uint64=0l; while (m) { addClassMethod(cls, m->name, &val, m->type, CMPI_nullValue); qs=&m->qualifiers; q=qs ? qs->first : NULL; n=0; while (q) { if (q->type & CMPI_ARRAY) { CMPIType type=q->type&~CMPI_ARRAY; arr = newCMPIArray(0, type, NULL); int i; if (q->data.array.max) { for (i = 0; i < q->data.array.next; ++i) { val = str2CMPIValue(type, q->data.array.values[i], NULL); CMSetArrayElementAt(arr, i, &val, type); native_release_CMPIValue(type,&val); } } val.array = arr; rc = addClassMethodQualifier(cls, m->name, q->name, &val, q->type); native_release_CMPIValue(q->type,(CMPIValue*)&arr); } else { val = str2CMPIValue(q->type, q->data.value.data.value, NULL); rc= addClassMethodQualifier(cls, m->name, q->name, &val, q->type); native_release_CMPIValue(q->type,&val); } nq = q->next; q = nq; } ps=&m->params; p=ps ? ps->first : NULL; n=0; while (p) { rc= addClassMethodParameter(cls, m->name, p->name, p->type); np = p->next; p = np; } nm = m->next; m = nm; } if (ms) ms->first = ms->last = NULL; }
ClassBuilder &ClassBuilder::addPrimitiveClassMethod(int primitiveNumber, const char *name, PrimitiveFunction primitive) { addClassMethod(name, primitive); context->registerPrimitive(primitiveNumber, primitive); return *this; }