CmpiImpl.cpp

Go to the documentation of this file.
00001 /*
00002  *
00003  * CmpiImpl.cpp
00004  *
00005  * (C) Copyright IBM Corp. 2003
00006  *
00007  * THIS FILE IS PROVIDED UNDER THE TERMS OF THE COMMON PUBLIC LICENSE
00008  * ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
00009  * CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
00010  *
00011  * You can obtain a current copy of the Common Public License from
00012  * http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
00013  *
00014  * Author:        Adrian Schuur <schuur@de.ibm.com>
00015  * Contributors:
00016  *
00017  * Description: CMPI C++ implemenation support
00018  *
00019  */
00020 
00021 
00022 #include "CmpiInstance.h"
00023 #include "CmpiObjectPath.h"
00024 #include "CmpiResult.h"
00025 #include "CmpiDateTime.h"
00026 
00027 #include "CmpiBaseMI.h"
00028 #include "CmpiInstanceMI.h"
00029 #include "CmpiAssociationMI.h"
00030 #include "CmpiMethodMI.h"
00031 #include "CmpiPropertyMI.h"
00032 #include "CmpiIndicationMI.h"
00033 #include "CmpiArray.h"
00034 #include "CmpiBroker.h"
00035 #include "cmpisrv.h"
00036 
00037 //CMPIBroker *CmpiBaseMI::broker=NULL;
00038 //int CmpiBaseMI::oneTime=0;
00039 
00040 CmpiProviderBase* CmpiProviderBase::base = NULL;
00041 
00042 //---------------------------------------------------
00043 //--
00044 // C to C++ base provider function drivers
00045 //--
00046 //---------------------------------------------------
00047 
00048 
00049 CMPIStatus CmpiBaseMI::doDriveBaseCleanup
00050       (void* vi, CMPIContext* eCtx) {
00051    CMPIInstanceMI *mi=( CMPIInstanceMI*)vi;
00052    CmpiContext ctx(eCtx);
00053    CmpiStatus rc(CMPI_RC_OK);
00054    rc=((CmpiInstanceMI*)mi->hdl)->cleanup(ctx);
00055    delete (CmpiBaseMI*)mi->hdl;
00056    return rc.status();
00057 }
00058 CmpiStatus CmpiBaseMI::initialize(const CmpiContext& ctx) {
00059    return CmpiStatus(CMPI_RC_OK);
00060 }
00061 
00062 CmpiStatus CmpiBaseMI::cleanup(CmpiContext& ctx) {
00063    return CmpiStatus(CMPI_RC_OK);
00064 }
00065 
00066 //---------------------------------------------------
00067 //--
00068 // C to C++ instance provider function drivers
00069 //--
00070 //---------------------------------------------------
00071 
00072 CMPIStatus CmpiInstanceMI::driveEnumInstanceNames
00073    (CMPIInstanceMI* mi,CMPIContext* eCtx, CMPIResult* eRslt,
00074     CMPIObjectPath* eCop)
00075 {
00076    CmpiContext ctx(eCtx);
00077    CmpiResult rslt(eRslt);
00078    CmpiObjectPath cop(eCop);
00079    return ((CmpiInstanceMI*)mi->hdl)->enumInstanceNames
00080       (ctx,rslt,cop).status();
00081 }
00082 
00083 CMPIStatus CmpiInstanceMI::driveEnumInstances
00084    (CMPIInstanceMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00085     CMPIObjectPath* eCop, char* *properties)
00086 {
00087    CmpiContext ctx(eCtx);
00088    CmpiResult rslt(eRslt);
00089    CmpiObjectPath cop(eCop);
00090    return ((CmpiInstanceMI*)mi->hdl)->enumInstances
00091       (ctx,rslt,cop,(const char**)properties).status();
00092 }
00093 
00094 CMPIStatus CmpiInstanceMI::driveGetInstance
00095    (CMPIInstanceMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00096     CMPIObjectPath* eCop, char* *properties)
00097 {
00098    CmpiContext ctx(eCtx);
00099    CmpiResult rslt(eRslt);
00100    CmpiObjectPath cop(eCop);
00101    return ((CmpiInstanceMI*)mi->hdl)->getInstance
00102       (ctx,rslt,cop,(const char**)properties).status();
00103 }
00104 
00105 CMPIStatus CmpiInstanceMI::driveCreateInstance
00106    (CMPIInstanceMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00107     CMPIObjectPath* eCop, CMPIInstance* eInst)
00108 {
00109    CmpiContext ctx(eCtx);
00110    CmpiResult rslt(eRslt);
00111    CmpiObjectPath cop(eCop);
00112    CmpiInstance inst(eInst);
00113    return ((CmpiInstanceMI*)mi->hdl)->createInstance
00114       (ctx,rslt,cop,inst).status();
00115 }
00116 
00117 CMPIStatus CmpiInstanceMI::driveSetInstance
00118    (CMPIInstanceMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00119     CMPIObjectPath* eCop, CMPIInstance* eInst, char* *properties)
00120 {
00121    CmpiContext ctx(eCtx);
00122    CmpiResult rslt(eRslt);
00123    CmpiObjectPath cop(eCop);
00124    CmpiInstance inst(eInst);
00125    return ((CmpiInstanceMI*)mi->hdl)->setInstance
00126       (ctx,rslt,cop,inst,(const char**)properties).status();
00127 }
00128 
00129 CMPIStatus CmpiInstanceMI::driveDeleteInstance
00130    (CMPIInstanceMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00131     CMPIObjectPath* eCop)
00132 {
00133    CmpiContext ctx(eCtx);
00134    CmpiResult rslt(eRslt);
00135    CmpiObjectPath cop(eCop);
00136    return ((CmpiInstanceMI*)mi->hdl)->deleteInstance
00137       (ctx,rslt,cop).status();
00138 }
00139 
00140 CMPIStatus CmpiInstanceMI::driveExecQuery
00141    (CMPIInstanceMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00142     CMPIObjectPath* eCop, char* language ,char* query)
00143 {
00144    CmpiContext ctx(eCtx);
00145    CmpiResult rslt(eRslt);
00146    CmpiObjectPath cop(eCop);
00147    return ((CmpiInstanceMI*)mi->hdl)->execQuery
00148     (ctx,rslt,cop,language,query).status();
00149 }
00150 
00151 
00152 //---------------------------------------------------
00153 //--
00154 // Default Instance provider functions
00155 //--
00156 //---------------------------------------------------
00157 
00158 CmpiStatus CmpiInstanceMI::enumInstanceNames
00159               (const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath& cop) {
00160    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00161 }
00162 
00163 CmpiStatus CmpiInstanceMI::enumInstances
00164               (const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath& cop,
00165           const char* *properties){
00166    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00167 }
00168 
00169 CmpiStatus CmpiInstanceMI::getInstance
00170               (const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath& cop,
00171           const char* *properties) {
00172    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00173 }
00174 
00175 CmpiStatus CmpiInstanceMI::createInstance
00176               (const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath& cop,
00177                const CmpiInstance& inst) {
00178    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00179 }
00180 
00181 CmpiStatus CmpiInstanceMI::setInstance
00182               (const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath& cop,
00183               const  CmpiInstance& inst, const char* *properties) {
00184    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00185 }
00186 
00187 CmpiStatus CmpiInstanceMI::deleteInstance
00188               (const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath& cop) {
00189    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00190 }
00191 
00192 CmpiStatus CmpiInstanceMI::execQuery
00193               (const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath& cop,
00194                const char* language, const char* query) {
00195    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00196 }
00197 
00198 
00199 //---------------------------------------------------
00200 //--
00201 // C to C++ association provider function drivers
00202 //--
00203 //---------------------------------------------------
00204 
00205 CMPIStatus CmpiAssociationMI::driveAssociators
00206       (CMPIAssociationMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00207        CMPIObjectPath* eOp, char* assocClass, char* resultClass,
00208        char* role, char* resultRole, char** properties) {
00209    CmpiContext ctx(eCtx);
00210    CmpiResult rslt(eRslt);
00211    CmpiObjectPath cop(eOp);
00212    return ((CmpiAssociationMI*)mi->hdl)->associators
00213       (ctx,rslt,cop,
00214        (const char*)assocClass,(const char*)resultClass,
00215        (const char*)role,(const char*)resultRole,(const char**)properties).status();
00216 }
00217 
00218 CMPIStatus CmpiAssociationMI::driveAssociatorNames
00219       (CMPIAssociationMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00220        CMPIObjectPath* eOp, char* assocClass, char* resultClass,
00221        char* role, char* resultRole) {
00222    CmpiContext ctx(eCtx);
00223    CmpiResult rslt(eRslt);
00224    CmpiObjectPath cop(eOp);
00225    return ((CmpiAssociationMI*)mi->hdl)->associatorNames
00226       (ctx,rslt,cop,
00227        (const char*)assocClass,(const char*)resultClass,
00228        (const char*)role,(const char*)resultRole).status();
00229 }
00230 
00231 CMPIStatus CmpiAssociationMI::driveReferences
00232       (CMPIAssociationMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00233        CMPIObjectPath* eOp, char* resultClass, char* role ,
00234        char** properties) {
00235    CmpiContext ctx(eCtx);
00236    CmpiResult rslt(eRslt);
00237    CmpiObjectPath cop(eOp);
00238    return ((CmpiAssociationMI*)mi->hdl)->references
00239       (ctx,rslt,cop,
00240        (const char*)resultClass,(const char*)role,(const char**)properties).status();
00241 }
00242 
00243 CMPIStatus CmpiAssociationMI::driveReferenceNames
00244       (CMPIAssociationMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00245        CMPIObjectPath* eOp, char* resultClass, char* role) {
00246    CmpiContext ctx(eCtx);
00247    CmpiResult rslt(eRslt);
00248    CmpiObjectPath cop(eOp);
00249    return ((CmpiAssociationMI*)mi->hdl)->referenceNames
00250       (ctx,rslt,cop,
00251        (const char*)resultClass,(const char*)role).status();
00252 }
00253 
00254 
00255 //---------------------------------------------------
00256 //--
00257 // Default Association provider functions
00258 //--
00259 //---------------------------------------------------
00260 
00261 CmpiStatus CmpiAssociationMI::associators
00262       (const CmpiContext& ctx, CmpiResult& rslt,
00263        const CmpiObjectPath& op, const char* assocClass, const char* resultClass,
00264        const char* role, const char* resultRole, const char** properties) {
00265    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00266 }
00267 
00268 CmpiStatus CmpiAssociationMI::associatorNames
00269       (const CmpiContext& ctx, CmpiResult& rslt,
00270        const CmpiObjectPath& op, const char* assocClass, const char* resultClass,
00271        const char* role, const char* resultRole) {
00272    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00273 }
00274 
00275 CmpiStatus CmpiAssociationMI::references
00276       (const CmpiContext& ctx, CmpiResult& rslt,
00277        const CmpiObjectPath& op, const char* resultClass, const char* role ,
00278        const char** properties) {
00279    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00280 }
00281 
00282 CmpiStatus CmpiAssociationMI::referenceNames
00283       (const CmpiContext& ctx, CmpiResult& rslt,
00284        const CmpiObjectPath& op, const char* resultClass, const char* role) {
00285    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00286 }
00287 
00288 
00289 //---------------------------------------------------
00290 //--
00291 // C to C++ method provider function drivers
00292 //--
00293 //---------------------------------------------------
00294 
00295 CMPIStatus CmpiMethodMI::driveInvokeMethod
00296    (CMPIMethodMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00297     CMPIObjectPath* eCop, char* methodName,
00298     CMPIArgs* eIn, CMPIArgs* eOut)
00299 {
00300    const CmpiContext ctx(eCtx);
00301    CmpiResult rslt(eRslt);
00302    const CmpiObjectPath cop(eCop);
00303    const CmpiArgs in(eIn);
00304    CmpiArgs out(eOut);
00305    return ((CmpiMethodMI*)mi->hdl)->invokeMethod
00306       (ctx,rslt,cop,(const char*)methodName,in,out).status();
00307 }
00308 
00309 
00310 //---------------------------------------------------
00311 //--
00312 // Default Method provider functions
00313 //--
00314 //---------------------------------------------------
00315 
00316 CmpiStatus CmpiMethodMI::invokeMethod
00317               (const CmpiContext& ctx, CmpiResult& rslt,
00318           const CmpiObjectPath& ref, const char* methodName,
00319           const CmpiArgs& in, CmpiArgs& out) {
00320    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00321 }
00322 
00323 
00324 //---------------------------------------------------
00325 //--
00326 // C to C++ property provider function drivers
00327 //--
00328 //---------------------------------------------------
00329 
00330 CMPIStatus CmpiPropertyMI::driveSetProperty
00331       (CMPIPropertyMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00332        CMPIObjectPath* eCop, char* name, CMPIData eData) {
00333    const CmpiContext ctx(eCtx);
00334    CmpiResult rslt(eRslt);
00335    const CmpiObjectPath cop(eCop);
00336    const CmpiData data(eData);
00337    return ((CmpiPropertyMI*)mi->hdl)->setProperty
00338       (ctx,rslt,cop,(const char*)name,data).status();
00339 }
00340 
00341 CMPIStatus CmpiPropertyMI::driveGetProperty
00342       (CMPIPropertyMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00343        CMPIObjectPath* eCop, char* name) {
00344    const CmpiContext ctx(eCtx);
00345    CmpiResult rslt(eRslt);
00346    const CmpiObjectPath cop(eCop);
00347    return ((CmpiPropertyMI*)mi->hdl)->getProperty
00348       (ctx,rslt,cop,(const char*)name).status();
00349 }
00350 
00351 
00352 //---------------------------------------------------
00353 //--
00354 // Default property provider functions
00355 //--
00356 //---------------------------------------------------
00357 
00358 CmpiStatus CmpiPropertyMI::setProperty
00359       (const CmpiContext& ctx, CmpiResult& rslt,
00360        const CmpiObjectPath& op, const char* name, const CmpiData& data) {
00361    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00362 }
00363 
00364 CmpiStatus CmpiPropertyMI::getProperty
00365       (const CmpiContext& ctx, CmpiResult& rslt,
00366        const CmpiObjectPath& op, const char* name) {
00367    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00368 }
00369 
00370 
00371 //---------------------------------------------------
00372 //--
00373 // C to C++ indication provider function drivers
00374 //--
00375 //---------------------------------------------------
00376 
00377 CMPIStatus CmpiIndicationMI::driveAuthorizeFilter
00378       (CMPIIndicationMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00379        CMPISelectExp* eSe, char* ns, CMPIObjectPath* eCop, char* user){
00380    const CmpiContext ctx(eCtx);
00381    CmpiResult rslt(eRslt);
00382    const CmpiObjectPath cop(eCop);
00383    const CmpiSelectExp se(eSe);
00384    return ((CmpiIndicationMI*)mi->hdl)->authorizeFilter
00385       (ctx,rslt,se,(const char*)ns,cop,(const char*)user).status();
00386 }
00387 
00388 CMPIStatus CmpiIndicationMI::driveMustPoll
00389       (CMPIIndicationMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00390        CMPISelectExp* eSe, char* ns, CMPIObjectPath* eCop){
00391    const CmpiContext ctx(eCtx);
00392    CmpiResult rslt(eRslt);
00393    const CmpiObjectPath cop(eCop);
00394    const CmpiSelectExp se(eSe);
00395    return ((CmpiIndicationMI*)mi->hdl)->mustPoll
00396       (ctx,rslt,se,(const char*)ns,cop).status();
00397 }
00398 
00399 CMPIStatus CmpiIndicationMI::driveActivateFilter
00400       (CMPIIndicationMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00401        CMPISelectExp* eSe, char* ns, CMPIObjectPath* eCop, CMPIBoolean first){
00402    const CmpiContext ctx(eCtx);
00403    CmpiResult rslt(eRslt);
00404    const CmpiObjectPath cop(eCop);
00405    const CmpiSelectExp se(eSe);
00406    return ((CmpiIndicationMI*)mi->hdl)->activateFilter
00407       (ctx,rslt,se,(const char*)ns,cop,first).status();
00408 }
00409 
00410 CMPIStatus CmpiIndicationMI::driveDeActivateFilter
00411       (CMPIIndicationMI* mi, CMPIContext* eCtx, CMPIResult* eRslt,
00412        CMPISelectExp* eSe, char* ns, CMPIObjectPath* eCop, CMPIBoolean last){
00413    const CmpiContext ctx(eCtx);
00414    CmpiResult rslt(eRslt);
00415    const CmpiObjectPath cop(eCop);
00416    const CmpiSelectExp se(eSe);
00417    return ((CmpiIndicationMI*)mi->hdl)->deActivateFilter
00418       (ctx,rslt,se,(const char*)ns,cop,last).status();
00419 }
00420 
00421 
00422 //---------------------------------------------------
00423 //--
00424 // Default indication provider functions
00425 //--
00426 //---------------------------------------------------
00427 
00428 CmpiStatus CmpiIndicationMI::authorizeFilter
00429       (const CmpiContext& ctx, CmpiResult& rslt,
00430        const CmpiSelectExp& se, const char* ns, const CmpiObjectPath& op, const char* user) {
00431    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00432 }
00433 
00434 CmpiStatus CmpiIndicationMI::mustPoll
00435       (const CmpiContext& ctx, CmpiResult& rslt,
00436        const CmpiSelectExp& se, const char* ns, const CmpiObjectPath& op) {
00437    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00438 }
00439 
00440 CmpiStatus CmpiIndicationMI::activateFilter
00441       (const CmpiContext& ctx, CmpiResult& rslt,
00442        const CmpiSelectExp& se, const char* ns, const CmpiObjectPath& op,
00443        CMPIBoolean first) {
00444    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00445 }
00446 
00447 CmpiStatus CmpiIndicationMI::deActivateFilter
00448       (const CmpiContext& ctx, CmpiResult& rslt,
00449        const CmpiSelectExp& se, const char* ns, const CmpiObjectPath& op,
00450        CMPIBoolean last) {
00451    return CmpiStatus(CMPI_RC_ERR_NOT_SUPPORTED);
00452 }
00453 
00454 
00455 
00456 
00457 
00458 
00459 //---------------------------------------------------
00460 //--
00461 // CmpiArray member functions
00462 //--
00463 //---------------------------------------------------
00464 
00465 void *CmpiArray::makeArray(CMPIBroker *mb, CMPICount max, CMPIType type) {
00466    CMPIStatus rc;
00467    void *array=mb->eft->newArray(mb,max,type,&rc);
00468    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00469    return array;
00470 }
00471 
00472 CMPICount CmpiArray::size() {
00473    CMPIStatus rc;
00474    CMPICount c=getEnc()->ft->getSize(getEnc(),&rc);
00475    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00476    return c;
00477 }
00478 
00479 //---------------------------------------------------
00480 //--
00481 // CmpiArrayIdx member functions
00482 //--
00483 //---------------------------------------------------
00484 
00485 
00486 void CmpiArrayIdx::operator=(const CmpiString v) {
00487    CMPIStatus rc;
00488    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_string)
00489       throw CMPI_RC_ERR_TYPE_MISMATCH;
00490    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_string);
00491    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00492 }
00493 
00494 void CmpiArrayIdx::operator=(const char* v) {
00495    CMPIStatus rc;
00496    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_chars)
00497       throw CMPI_RC_ERR_TYPE_MISMATCH;
00498    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_chars);
00499    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00500 }
00501 
00502 void CmpiArrayIdx::operator=(const CMPISint8 v) {
00503    CMPIStatus rc;
00504    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint8)
00505       throw CMPI_RC_ERR_TYPE_MISMATCH;
00506    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_sint8);
00507    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00508 }
00509 
00510 void CmpiArrayIdx::operator=(const CMPISint16 v) {
00511    CMPIStatus rc;
00512    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint16)
00513       throw CMPI_RC_ERR_TYPE_MISMATCH;
00514    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_sint16);
00515    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00516 }
00517 
00518 void CmpiArrayIdx::operator=(const CMPISint32 v) {
00519    CMPIStatus rc;
00520    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint32)
00521       throw CMPI_RC_ERR_TYPE_MISMATCH;
00522    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_sint32);
00523    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00524 }
00525 
00526 void CmpiArrayIdx::operator=(const int v) {
00527    CMPIStatus rc;
00528    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint32)
00529       throw CMPI_RC_ERR_TYPE_MISMATCH;
00530    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_sint32);
00531    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00532 }
00533 
00534 
00535 void CmpiArrayIdx::operator=(const CMPISint64 v) {
00536    CMPIStatus rc;
00537    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint64)
00538       throw CMPI_RC_ERR_TYPE_MISMATCH;
00539    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_sint64);
00540    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00541 }
00542 
00543 void CmpiArrayIdx::operator=(const CMPIUint8 v) {
00544    CMPIStatus rc;
00545    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_uint8)
00546       throw CMPI_RC_ERR_TYPE_MISMATCH;
00547    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_uint8);
00548    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00549 }
00550 
00551 void CmpiArrayIdx::operator=(const CMPIUint16 v) {
00552    CMPIStatus rc;
00553    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_uint16)
00554       throw CMPI_RC_ERR_TYPE_MISMATCH;
00555    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_uint16);
00556    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00557 }
00558 
00559 void CmpiArrayIdx::operator=(const CMPIUint32 v) {
00560    CMPIStatus rc;
00561    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_uint32)
00562       throw CMPI_RC_ERR_TYPE_MISMATCH;
00563    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_uint32);
00564    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00565 }
00566 
00567 void CmpiArrayIdx::operator=(const unsigned int v) {
00568    CMPIStatus rc;
00569    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_uint32)
00570       throw CMPI_RC_ERR_TYPE_MISMATCH;
00571    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_uint32);
00572    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00573 }
00574 
00575 void CmpiArrayIdx::operator=(const CMPIUint64 v) {
00576    CMPIStatus rc;
00577    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_uint64)
00578       throw CMPI_RC_ERR_TYPE_MISMATCH;
00579    rc=ar.getEnc()->ft->setElementAt(ar.getEnc(),idx,(CMPIValue*)&v,CMPI_uint64);
00580    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00581 }
00582 
00583 
00584 void CmpiArrayIdx::operator>>(CmpiString& v) {
00585    CMPIStatus rc;
00586    CMPIData d;
00587    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_string)
00588       throw CMPI_RC_ERR_TYPE_MISMATCH;
00589    d=ar.getEnc()->ft->getElementAt(ar.getEnc(),idx,&rc);
00590    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00591    v=CmpiString(d.value.string);
00592 }
00593 
00594 void CmpiArrayIdx::operator>>(CMPISint8& v) {
00595    CMPIStatus rc;
00596    CMPIData d;
00597    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint8)
00598       throw CMPI_RC_ERR_TYPE_MISMATCH;
00599    d=ar.getEnc()->ft->getElementAt(ar.getEnc(),idx,&rc);
00600    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00601    v=d.value.sint8;
00602 }
00603 
00604 void CmpiArrayIdx::operator>>(CMPISint16& v) {
00605    CMPIStatus rc;
00606    CMPIData d;
00607    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint16)
00608       throw CMPI_RC_ERR_TYPE_MISMATCH;
00609    d=ar.getEnc()->ft->getElementAt(ar.getEnc(),idx,&rc);
00610    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00611    v=d.value.sint16;
00612 }
00613 
00614 void CmpiArrayIdx::operator>>(CMPISint32& v) {
00615    CMPIStatus rc;
00616    CMPIData d;
00617    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint32)
00618       throw CMPI_RC_ERR_TYPE_MISMATCH;
00619    d=ar.getEnc()->ft->getElementAt(ar.getEnc(),idx,&rc);
00620    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00621    v=d.value.sint32;
00622 }
00623 
00624 void CmpiArrayIdx::operator>>(int& v) {
00625    CMPIStatus rc;
00626    CMPIData d;
00627    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint32)
00628       throw CMPI_RC_ERR_TYPE_MISMATCH;
00629    d=ar.getEnc()->ft->getElementAt(ar.getEnc(),idx,&rc);
00630    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00631    v=(int)d.value.sint32;
00632 }
00633 
00634 void CmpiArrayIdx::operator>>(CMPISint64& v) {
00635    CMPIStatus rc;
00636    CMPIData d;
00637    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_sint64)
00638       throw CMPI_RC_ERR_TYPE_MISMATCH;
00639    d=ar.getEnc()->ft->getElementAt(ar.getEnc(),idx,&rc);
00640    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00641    v=(int)d.value.sint64;
00642 }
00643 
00644 void CmpiArrayIdx::operator>>(CMPIUint8& v) {
00645    CMPIStatus rc;
00646    CMPIData d;
00647    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_uint8)
00648       throw CMPI_RC_ERR_TYPE_MISMATCH;
00649    d=ar.getEnc()->ft->getElementAt(ar.getEnc(),idx,&rc);
00650    if (rc.rc!=CMPI_RC_OK) throw rc.rc;
00651    v=d.value.uint8;
00652 }
00653 
00654 void CmpiArrayIdx::operator>>(CMPIUint16& v) {
00655    CMPIStatus rc;
00656    CMPIData d;
00657    if (ar.getEnc()->ft->getSimpleType(ar.getEnc(),&rc)!=CMPI_uint16)
00658       throw CMPI_RC_ERR_TYPE_MISMATCH;
00659    d=ar.getEnc()->ft->getElementAt(ar.getEnc(),idx,&rc);
00660    if (rc.rc!=