00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "cmpisrv.h"
00024
00025 static CMPIStatus enumRelease(CMPIEnumeration* eEnum)
00026 {
00027 if (eEnum->hdl)
00028 {
00029 if ((void*)eEnum->ft==(void*)CMPI_OpEnumeration_Ftab)
00030 delete (OpenWBEM::Array<OpenWBEM::CIMObjectPath>*)eEnum->hdl;
00031 else
00032 delete (OpenWBEM::Array<OpenWBEM::CIMInstance>*)eEnum->hdl;
00033
00034 ((CMPI_Object*)eEnum)->unlinkAndDelete();
00035 }
00036 CMReturn(CMPI_RC_OK);
00037 }
00038
00039
00040
00041
00042
00043 static CMPIEnumeration* enumClone(const CMPIEnumeration* eEnum, CMPIStatus* rc)
00044 {
00045 (void)eEnum; (void)rc;
00046
00047
00048
00049
00050
00051 return NULL;
00052 }
00053
00054 CMPIData enumGetNext(const CMPIEnumeration* eEnum, CMPIStatus* rc)
00055 {
00056 CMPIData data={0,0,{0}};
00057 if ((void*)eEnum->ft==(void*)CMPI_ObjEnumeration_Ftab)
00058 {
00059 CMPI_ObjEnumeration* ie=(CMPI_ObjEnumeration*)eEnum;
00060 data.type=CMPI_instance;
00061 OpenWBEM::Array<OpenWBEM::CIMInstance>* ia=(OpenWBEM::Array<OpenWBEM::CIMInstance>*)ie->hdl;
00062 if (ie->cursor<ie->max)
00063 {
00064 data.value.inst=(CMPIInstance*)
00065 new CMPI_Object(new OpenWBEM::CIMInstance((*ia)[ie->cursor++]));
00066 CMSetStatus(rc,CMPI_RC_OK);
00067 }
00068 else
00069 {
00070 CMSetStatus(rc,CMPI_RC_ERR_FAILED);
00071 }
00072 }
00073
00074 else if ((void*)eEnum->ft==(void*)CMPI_InstEnumeration_Ftab)
00075 {
00076 CMPI_InstEnumeration* ie=(CMPI_InstEnumeration*)eEnum;
00077 data.type=CMPI_instance;
00078 OpenWBEM::Array<OpenWBEM::CIMInstance>* ia=(OpenWBEM::Array<OpenWBEM::CIMInstance>*)ie->hdl;
00079 if (ie->cursor<ie->max)
00080 {
00081 data.value.inst=(CMPIInstance*)
00082 new CMPI_Object(new OpenWBEM::CIMInstance((*ia)[ie->cursor++]));
00083 CMSetStatus(rc,CMPI_RC_OK);
00084 }
00085 else
00086 {
00087 CMSetStatus(rc,CMPI_RC_ERR_FAILED);
00088 }
00089 }
00090
00091 else
00092 {
00093 CMPI_OpEnumeration* oe=(CMPI_OpEnumeration*)eEnum;
00094 data.type=CMPI_ref;
00095 OpenWBEM::Array<OpenWBEM::CIMObjectPath>* opa=(OpenWBEM::Array<OpenWBEM::CIMObjectPath>*)oe->hdl;
00096 if (oe->cursor<oe->max)
00097 {
00098 data.value.ref=(CMPIObjectPath*)
00099 new CMPI_Object(new OpenWBEM::CIMObjectPath((*opa)[oe->cursor++]));
00100 CMSetStatus(rc,CMPI_RC_OK);
00101 }
00102 else
00103 {
00104 CMSetStatus(rc,CMPI_RC_ERR_FAILED);
00105 }
00106 }
00107 return data;
00108 }
00109
00110 CMPIBoolean enumHasNext(const CMPIEnumeration* eEnum, CMPIStatus* rc)
00111 {
00112 CMSetStatus(rc,CMPI_RC_OK);
00113 if ((void*)eEnum->ft==(void*)CMPI_ObjEnumeration_Ftab)
00114 {
00115 CMPI_ObjEnumeration* ie=(CMPI_ObjEnumeration*)eEnum;
00116 if (ie->cursor<ie->max) return true;
00117 }
00118 else if ((void*)eEnum->ft==(void*)CMPI_InstEnumeration_Ftab)
00119 {
00120 CMPI_InstEnumeration* ie=(CMPI_InstEnumeration*)eEnum;
00121 if (ie->cursor<ie->max) return true;
00122 }
00123 else
00124 {
00125 CMPI_OpEnumeration* oe=(CMPI_OpEnumeration*)eEnum;
00126 if (oe->cursor<oe->max) return true;
00127 }
00128 return false;
00129 }
00130
00131 CMPIArray* enumToArray(const CMPIEnumeration* eEnum, CMPIStatus* rc)
00132 {
00133 (void)eEnum; (void)rc;
00134 return NULL;
00135 }
00136
00137
00138 static CMPIEnumerationFT objEnumeration_FT={
00139 CMPICurrentVersion,
00140 enumRelease,
00141 enumClone,
00142 enumGetNext,
00143 enumHasNext,
00144 enumToArray,
00145 };
00146
00147 static CMPIEnumerationFT instEnumeration_FT={
00148 CMPICurrentVersion,
00149 enumRelease,
00150 enumClone,
00151 enumGetNext,
00152 enumHasNext,
00153 enumToArray,
00154 };
00155
00156 static CMPIEnumerationFT opEnumeration_FT={
00157 CMPICurrentVersion,
00158 enumRelease,
00159 enumClone,
00160 enumGetNext,
00161 enumHasNext,
00162 enumToArray,
00163 };
00164
00165 CMPIEnumerationFT *CMPI_ObjEnumeration_Ftab=&objEnumeration_FT;
00166 CMPIEnumerationFT *CMPI_InstEnumeration_Ftab=&instEnumeration_FT;
00167 CMPIEnumerationFT *CMPI_OpEnumeration_Ftab=&opEnumeration_FT;
00168
00169 CMPI_ObjEnumeration::CMPI_ObjEnumeration(OpenWBEM::Array<OpenWBEM::CIMInstance>* oa)
00170 {
00171 CMPI_ThreadContext::addObject((CMPI_Object*)(this));
00172 cursor=0;
00173 max=oa->size();
00174 hdl=(void*)oa;
00175 ft=CMPI_ObjEnumeration_Ftab;
00176 }
00177 CMPI_InstEnumeration::CMPI_InstEnumeration(OpenWBEM::Array<OpenWBEM::CIMInstance>* ia)
00178 {
00179 CMPI_ThreadContext::addObject((CMPI_Object*)(this));
00180 cursor=0;
00181 max=ia->size();
00182 hdl=(void*)ia;
00183 ft=CMPI_InstEnumeration_Ftab;
00184 }
00185
00186 CMPI_OpEnumeration::CMPI_OpEnumeration(OpenWBEM::Array<OpenWBEM::CIMObjectPath>* opa)
00187 {
00188 CMPI_ThreadContext::addObject((CMPI_Object*)(this));
00189 cursor=0;
00190 max=opa->size();
00191 hdl=(void*)opa;
00192 ft=CMPI_OpEnumeration_Ftab;
00193 }
00194
00195
00196