00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 static const char *rcsid = "$Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/src/GATReservationCPI.c,v 1.5 2004/04/02 12:31:58 hartmutkaiser Exp $";
00018
00019
00020 #include <stdio.h>
00021 #include <stdlib.h>
00022
00023
00024 #include "GATErrors.h"
00025 #include "GATReservationCPI.h"
00026
00027
00028
00029
00030 struct GATReservationCPI_S
00031 {
00032
00033 void *data;
00034 GATReservationCPI_Adaptor_Destroy destroy;
00035 GATReservationCPI_Adaptor_ServiceActions service_actions;
00036
00037
00038 GATReservationCPI_Adaptor_CreateInstance create_instance;
00039 GATReservationCPI_Adaptor_DestroyInstance destroy_instance;
00040 GATReservationCPI_Adaptor_CloneInstance clone_instance;
00041 GATReservationCPI_Adaptor_EqualsInstance equals_instance;
00042
00043
00044 GATReservationCPI_Adaptor_Cancel cancel;
00045 GATReservationCPI_Adaptor_GetResource get_resource;
00046 };
00047
00048
00049 static GATBool
00050 GATReservationCPI_IsValidData_V1(GATReservationCPI_Data *data);
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 GATReservationCPI GATReservationCPI_Create(unsigned long int version,
00065 GATReservationCPI_Data *data)
00066 {
00067 GATReservationCPI new_cpi = NULL;
00068
00069 if (version <= GATRESERVATIONCPI_VERSION)
00070 {
00071 if (version == GATRESERVATIONCPI_VERSION &&
00072 GATTrue == GATReservationCPI_IsValidData_V1(data))
00073 {
00074 new_cpi = (GATReservationCPI)malloc(sizeof(struct GATReservationCPI_S));
00075 if(NULL != new_cpi)
00076 {
00077 new_cpi->data = data->data;
00078 new_cpi->destroy = data->destroy;
00079 new_cpi->service_actions = data->service_actions;
00080
00081 new_cpi->destroy_instance = data->destroy_instance;
00082 new_cpi->create_instance = data->create_instance;
00083 new_cpi->equals_instance = data->equals_instance;
00084 new_cpi->clone_instance = data->clone_instance;
00085
00086 new_cpi->cancel = data->cancel;
00087 new_cpi->get_resource = data->get_resource;
00088 }
00089 }
00090
00091
00092
00093
00094
00095
00096
00097 else
00098 {
00099
00100
00101 new_cpi = NULL;
00102 }
00103 }
00104 else
00105 {
00106
00107
00108 new_cpi = NULL;
00109 }
00110 return new_cpi;
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120 void GATReservationCPI_Destroy(GATReservationCPI *object)
00121 {
00122 if(NULL != object && NULL != *object)
00123 {
00124
00125 (*object)->destroy((*object)->data);
00126 free(*object);
00127 *object = NULL;
00128 }
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 GATResult
00143 GATReservationCPI_CreateInstance(GATReservationCPI cpi,
00144 GATReservationCPI_Instance *instance_data)
00145 {
00146 return cpi->create_instance(cpi->data, instance_data);
00147 }
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 void
00158 GATReservationCPI_DestroyInstance(GATReservationCPI cpi,
00159 GATReservationCPI_Instance *instance_data)
00160 {
00161 cpi->destroy_instance(cpi->data, instance_data);
00162 }
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 GATResult
00178 GATReservationCPI_EqualsInstance(GATReservationCPI cpi,
00179 GATReservationCPI_Instance const *lhs, GATReservationCPI_Instance const *rhs,
00180 GATBool *isequal)
00181 {
00182 return cpi->equals_instance(cpi->data, lhs, rhs, isequal);
00183 }
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196 GATResult
00197 GATReservationCPI_CloneInstance(GATReservationCPI cpi,
00198 GATReservationCPI_Instance const *instance_data,
00199 GATReservationCPI_Instance *new_instance_data)
00200 {
00201 return cpi->clone_instance(cpi->data, instance_data, new_instance_data);
00202 }
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215 GATResult
00216 GATReservationCPI_Cancel(GATReservationCPI reservation,
00217 GATReservationCPI_Instance *instance_data)
00218 {
00219 return reservation->cancel(reservation->data, instance_data);
00220 }
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235 GATResult
00236 GATReservationCPI_GetResource(GATReservationCPI reservation,
00237 GATReservationCPI_Instance const *instance_data, GATResource_const *resource)
00238 {
00239 return reservation->get_resource(reservation->data, instance_data, resource);
00240 }
00241
00242
00243 static GATBool
00244 GATReservationCPI_IsValidData_V1(GATReservationCPI_Data *data)
00245 {
00246 return (
00247 NULL != data->destroy &&
00248
00249
00250 NULL != data->create_instance &&
00251 NULL != data->destroy_instance &&
00252 NULL != data->clone_instance &&
00253 NULL != data->equals_instance &&
00254
00255 NULL != data->cancel &&
00256 NULL != data->get_resource
00257 ) ? GATTrue : GATFalse;
00258 }