(file) Return to CMPI_Enumeration.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / CMPI

  1 schuur 1.1 //%2003////////////////////////////////////////////////////////////////////////
  2            //
  3            // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development
  4            // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
  5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
  6            // IBM Corp.; EMC Corporation, The Open Group.
  7            //
  8            // Permission is hereby granted, free of charge, to any person obtaining a copy
  9            // of this software and associated documentation files (the "Software"), to
 10            // deal in the Software without restriction, including without limitation the
 11            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 12            // sell copies of the Software, and to permit persons to whom the Software is
 13            // furnished to do so, subject to the following conditions:
 14            //
 15            // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 16            // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 17            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 18            // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 19            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 20            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 21            // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 22 schuur 1.1 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 23            //
 24            //==============================================================================
 25            //
 26            // Author:      Adrian Schuur, schuur@de.ibm.com
 27            //
 28            // Modified By:
 29            //
 30            //%/////////////////////////////////////////////////////////////////////////////
 31            
 32            #include "CMPI_Enumeration.h"
 33            #include "CMPI_Object.h"
 34            #include "CMPI_Ftabs.h"
 35            
 36            PEGASUS_USING_STD;
 37            PEGASUS_NAMESPACE_BEGIN
 38            
 39            
 40            static CMPIStatus enumRelease(CMPIEnumeration* eEnum) {
 41               //cout<<"--- enumRelease()"<<endl;
 42               CIMInstance* enm=(CIMInstance*)eEnum->hdl;
 43 schuur 1.1    if (enm) {
 44                  delete enm;
 45                  ((CMPI_Object*)eEnum)->unlinkAndDelete();
 46               }
 47               CMReturn(CMPI_RC_OK);
 48            }
 49            
 50            //static CMPIStatus enumReleaseNop(CMPIEnumeration* eEnum) {
 51            //   CMReturn(CMPI_RC_OK);
 52            //}
 53            
 54            static CMPIEnumeration* enumClone(CMPIEnumeration* eEnum, CMPIStatus* rc) {
 55            //   CIMInstance* enm=(CIMInstance*)eEnum->hdl;
 56            //   CIMInstance* cInst=new CIMInstance(enum->clone());
 57            //   CMPIEnumeration* neEnum=(CMPIEnumeration*)new CMPI_Object(cInst,CMPI_Instance_Ftab);
 58            //   if (rc) CMSetStatus(rc,CMPI_RC_OK);
 59            //   return neEnum;
 60               return NULL;
 61            }
 62            
 63            CMPIData enumGetNext(CMPIEnumeration* eEnum, CMPIStatus* rc) {
 64 schuur 1.1    CMPIData data={0,0,{0}};
 65               if ((void*)eEnum->ft==(void*)CMPI_ObjEnumeration_Ftab) {
 66                  CMPI_ObjEnumeration* ie=(CMPI_ObjEnumeration*)eEnum;
 67                  data.type=CMPI_instance;
 68                  Array<CIMInstance>* ia=(Array<CIMInstance>*)ie->hdl;
 69                  if (ie->cursor<ie->max) {
 70                     data.value.inst=(CMPIInstance*)
 71            	    new CMPI_Object(new CIMInstance((*ia)[ie->cursor++]));
 72                     if (rc) CMSetStatus(rc,CMPI_RC_OK);
 73                  }
 74                  else if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
 75               }
 76            
 77               else if ((void*)eEnum->ft==(void*)CMPI_InstEnumeration_Ftab) {
 78                  CMPI_InstEnumeration* ie=(CMPI_InstEnumeration*)eEnum;
 79                  data.type=CMPI_instance;
 80                  Array<CIMInstance>* ia=(Array<CIMInstance>*)ie->hdl;
 81                  if (ie->cursor<ie->max) {
 82                     data.value.inst=(CMPIInstance*)
 83            	    new CMPI_Object(new CIMInstance((*ia)[ie->cursor++]));
 84                     if (rc) CMSetStatus(rc,CMPI_RC_OK);
 85 schuur 1.1       }
 86                  else if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
 87               }
 88            
 89               else {
 90                  CMPI_OpEnumeration* oe=(CMPI_OpEnumeration*)eEnum;
 91                  data.type=CMPI_ref;
 92                  Array<CIMObjectPath>* opa=(Array<CIMObjectPath>*)oe->hdl;
 93                  if (oe->cursor<oe->max) {
 94                     data.value.ref=(CMPIObjectPath*)
 95            	    new CMPI_Object(new CIMObjectPath((*opa)[oe->cursor++]));
 96                     if (rc) CMSetStatus(rc,CMPI_RC_OK);
 97                  }
 98                  else if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
 99               }
100               return data;
101            }
102            
103            CMPIBoolean enumHasNext(CMPIEnumeration* eEnum, CMPIStatus* rc) {
104               if (rc) CMSetStatus(rc,CMPI_RC_OK);
105               if ((void*)eEnum->ft==(void*)CMPI_ObjEnumeration_Ftab) {
106 schuur 1.1       CMPI_ObjEnumeration* ie=(CMPI_ObjEnumeration*)eEnum;
107                  if (ie->cursor<ie->max) return true;
108               }
109               else if ((void*)eEnum->ft==(void*)CMPI_InstEnumeration_Ftab) {
110                  CMPI_InstEnumeration* ie=(CMPI_InstEnumeration*)eEnum;
111                  if (ie->cursor<ie->max) return true;
112               }
113               else {
114                  CMPI_OpEnumeration* oe=(CMPI_OpEnumeration*)eEnum;
115                  if (oe->cursor<oe->max) return true;
116               }
117               return false;
118            }
119            
120            CMPIArray* enumToArray(CMPIEnumeration* eEnum, CMPIStatus* rc) {
121               return NULL;
122            }
123            
124            
125            static CMPIEnumerationFT objEnumeration_FT={
126                 CMPICurrentVersion,
127 schuur 1.1      enumRelease,
128                 enumClone,
129                 enumGetNext,
130                 enumHasNext,
131                 enumToArray,
132            };
133            
134            static CMPIEnumerationFT instEnumeration_FT={
135                 CMPICurrentVersion,
136                 enumRelease,
137                 enumClone,
138                 enumGetNext,
139                 enumHasNext,
140                 enumToArray,
141            };
142            
143            static CMPIEnumerationFT opEnumeration_FT={
144                 CMPICurrentVersion,
145                 enumRelease,
146                 enumClone,
147                 enumGetNext,
148 schuur 1.1      enumHasNext,
149                 enumToArray,
150            };
151            
152            CMPIEnumerationFT *CMPI_ObjEnumeration_Ftab=&objEnumeration_FT;
153            CMPIEnumerationFT *CMPI_InstEnumeration_Ftab=&instEnumeration_FT;
154            CMPIEnumerationFT *CMPI_OpEnumeration_Ftab=&opEnumeration_FT;
155            
156            CMPI_ObjEnumeration::CMPI_ObjEnumeration(Array<CIMObject>* oa) {
157               cursor=0;
158               max=oa->size();
159               hdl=(void*)oa;
160               ft=CMPI_ObjEnumeration_Ftab;
161            }
162            CMPI_InstEnumeration::CMPI_InstEnumeration(Array<CIMInstance>* ia) {
163               cursor=0;
164               max=ia->size();
165               hdl=(void*)ia;
166               ft=CMPI_InstEnumeration_Ftab;
167            }
168            
169 schuur 1.1 CMPI_OpEnumeration::CMPI_OpEnumeration(Array<CIMObjectPath>* opa) {
170               cursor=0;
171               max=opa->size();
172               hdl=(void*)opa;
173               ft=CMPI_OpEnumeration_Ftab;
174            }
175            
176            PEGASUS_NAMESPACE_END
177            
178            
179            
180            
181            
182            
183            
184            
185            
186            
187            
188            
189            

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2