00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 static const char *rcsid = "$Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/src/GATEndpointCPI.c,v 1.8 2004/04/02 12:31:57 hartmutkaiser Exp $";
00022
00023
00024
00025 #include <stdio.h>
00026 #include <stdlib.h>
00027
00028
00029
00030 #include "GATEndpointCPI.h"
00031
00032
00033
00034
00035
00036 struct GATEndpointCPI_S
00037 {
00038
00039 void *data;
00040 GATEndpointCPI_Adaptor_Destroy destroy;
00041 GATEndPointCPI_Adaptor_ServiceActions service_actions;
00042
00043
00044 GATEndpointCPI_Adaptor_CreateInstance create_instance;
00045 GATEndpointCPI_Adaptor_DestroyInstance destroy_instance;
00046 GATEndpointCPI_Adaptor_CloneInstance clone_instance;
00047 GATEndpointCPI_Adaptor_EqualsInstance equals_instance;
00048
00049
00050 GATEndpointCPI_Adaptor_Serialise serialise;
00051 GATEndpointCPI_Adaptor_DeSerialise deserialise;
00052
00053
00054 GATEndpointCPI_Adaptor_Connect connect;
00055 GATEndpointCPI_Adaptor_Listen listen;
00056 GATEndpointCPI_Adaptor_AddGATPipeListener addPipeListener;
00057
00058
00059 GATEndpointCPI_Adaptor_GetMetrics get_metrics;
00060 GATEndpointCPI_Adaptor_GetMetricEvent get_metric_event;
00061 };
00062
00063
00064 static GATBool GATEndpointCPI_IsValidData_V1(GATEndpointCPI_Data *data);
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 GATEndpointCPI GATEndpointCPI_Create(unsigned long int version, GATEndpointCPI_Data *data)
00080 {
00081 GATEndpointCPI new_cpi = NULL;
00082
00083 if (version <= GATENDPOINTCPI_VERSION)
00084 {
00085 if (version == GATENDPOINTCPI_VERSION &&
00086 GATTrue == GATEndpointCPI_IsValidData_V1(data))
00087 {
00088 new_cpi = (GATEndpointCPI)malloc(sizeof(struct GATEndpointCPI_S));
00089 if(NULL != new_cpi)
00090 {
00091 new_cpi->data = data->data;
00092 new_cpi->destroy = data->destroy;
00093 new_cpi->service_actions = data->service_actions;
00094
00095 new_cpi->destroy_instance = data->destroy_instance;
00096 new_cpi->create_instance = data->create_instance;
00097 new_cpi->equals_instance = data->equals_instance;
00098 new_cpi->clone_instance = data->clone_instance;
00099
00100 new_cpi->serialise = data->serialise;
00101 new_cpi->deserialise = data->deserialise;
00102
00103 new_cpi->connect = data->connect;
00104 new_cpi->listen = data->listen;
00105 new_cpi->addPipeListener = data->addPipeListener;
00106
00107 new_cpi->get_metrics = data->get_metrics;
00108 new_cpi->get_metric_event = data->get_metric_event;
00109 }
00110 }
00111
00112
00113
00114
00115
00116
00117 else
00118 {
00119
00120
00121 }
00122 }
00123 else
00124 {
00125
00126
00127 }
00128 return new_cpi;
00129 }
00130
00131
00132
00133
00134
00135
00136
00137
00138 void GATEndpointCPI_Destroy(GATEndpointCPI *cpi)
00139 {
00140 if(NULL != cpi && NULL != *cpi)
00141 {
00142 (*cpi)->destroy((*cpi)->data);
00143 free(*cpi);
00144 *cpi = NULL;
00145 }
00146 }
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 GATResult
00159 GATEndpointCPI_CreateInstance(GATEndpointCPI cpi, GATEndpointCPI_Instance *data)
00160 {
00161 return cpi->create_instance(cpi->data, data);
00162 }
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172 void
00173 GATEndpointCPI_DestroyInstance(GATEndpointCPI cpi, GATEndpointCPI_Instance *data)
00174 {
00175 cpi->destroy_instance(cpi->data, data);
00176 }
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 GATResult
00192 GATEndpointCPI_EqualsInstance(GATEndpointCPI cpi, GATEndpointCPI_Instance const *lhs,
00193 GATEndpointCPI_Instance const *rhs, GATBool *isequal)
00194 {
00195 return cpi->equals_instance(cpi->data, lhs, rhs, isequal);
00196 }
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209 GATResult
00210 GATEndpointCPI_CloneInstance(GATEndpointCPI cpi,
00211 GATEndpointCPI_Instance const *data, GATEndpointCPI_Instance *new_data)
00212 {
00213 return cpi->clone_instance(cpi->data, data, new_data);
00214 }
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229 GATResult
00230 GATEndpointCPI_Serialise(GATEndpointCPI cpi,
00231 GATEndpointCPI_Instance const *data, GATObject stream, GATBool clear_dirty)
00232 {
00233 return cpi->serialise(cpi->data, data, stream, clear_dirty);
00234 }
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249 GATResult
00250 GATEndpointCPI_DeSerialise(GATEndpointCPI cpi,
00251 GATObject stream, GATEndpointCPI_Instance *data)
00252 {
00253 return cpi->deserialise(cpi->data, stream, data);
00254 }
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267 GATResult GATEndpointCPI_Connect(GATEndpointCPI cpi, GATEndpointCPI_Instance const *data, GATPipe *peep)
00268 {
00269 return cpi->connect(cpi->data, data, peep);
00270 }
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283 GATResult GATEndpointCPI_Listen(GATEndpointCPI cpi, GATEndpointCPI_Instance const *data, GATPipe *peep)
00284 {
00285 return cpi->listen(cpi->data, data, peep);
00286 }
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300 GATResult GATEndpointCPI_AddGATPipeListener(GATEndpointCPI cpi, GATEndpointCPI_Instance const *data, GATPipeListener pipeListener, void *listenerData)
00301 {
00302 return cpi->addPipeListener(cpi->data, data, pipeListener, listenerData);
00303 }
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317 GATResult
00318 GATEndpointCPI_GetMetrics(GATEndpointCPI cpi, GATEndpointCPI_Instance const *data,
00319 GATList_GATMetric *metrics)
00320 {
00321 return cpi->get_metrics(cpi->data, data, metrics);
00322 }
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338 GATResult
00339 GATEndpointCPI_GetMetricEvent(GATEndpointCPI cpi, GATEndpointCPI_Instance const *data,
00340 GATMetric metric, GATMetricEvent *event)
00341 {
00342 return cpi->get_metric_event(cpi->data, data, metric, event);
00343 }
00344
00345
00346 static GATBool
00347 GATEndpointCPI_IsValidData_V1(GATEndpointCPI_Data *data)
00348 {
00349 return (
00350 NULL != data->destroy &&
00351
00352
00353 NULL != data->destroy_instance &&
00354 NULL != data->create_instance &&
00355 NULL != data->clone_instance &&
00356 NULL != data->equals_instance &&
00357
00358 NULL != data->serialise &&
00359 NULL != data->deserialise &&
00360
00361 NULL != data->connect &&
00362 NULL != data->listen &&
00363 NULL != data->addPipeListener &&
00364
00365 NULL != data->get_metrics &&
00366 NULL != data->get_metric_event
00367 ) ? GATTrue : GATFalse;
00368 }