00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 static const char *rcsid = "$Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/src/GATFileCPI.c,v 1.25 2004/04/02 12:31:57 hartmutkaiser Exp $";
00023
00024
00025
00026 #include <stdio.h>
00027 #include <stdlib.h>
00028
00029
00030
00031 #include "GATFileCPI.h"
00032
00033
00034
00035
00036
00037 struct GATFileCPI_S
00038 {
00039
00040 void *data;
00041 GATFileCPI_Adaptor_Destroy destroy;
00042
00043
00044 GATFileCPI_Adaptor_ServiceActions service_actions;
00045 GATFileCPI_Adaptor_CreateInstance create_instance;
00046 GATFileCPI_Adaptor_DestroyInstance destroy_instance;
00047 GATFileCPI_Adaptor_CloneInstance clone_instance;
00048 GATFileCPI_Adaptor_EqualsInstance equals_instance;
00049
00050
00051 GATFileCPI_Adaptor_Serialise serialise;
00052 GATFileCPI_Adaptor_DeSerialise deserialise;
00053
00054
00055 GATFileCPI_Adaptor_Copy copy;
00056 GATFileCPI_Adaptor_Move move;
00057 GATFileCPI_Adaptor_Delete remove;
00058 GATFileCPI_Adaptor_IsReadable isreadable;
00059 GATFileCPI_Adaptor_IsWritable iswritable;
00060 GATFileCPI_Adaptor_GetLength length;
00061 GATFileCPI_Adaptor_LastWriteTime lastwritetime;
00062
00063
00064 GATFileCPI_Adaptor_GetMetrics get_metrics;
00065 GATFileCPI_Adaptor_GetMetricEvent get_metric_event;
00066 };
00067
00068
00069 static GATBool GATFileCPI_IsValidData_V1(GATFileCPI_Data *data);
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 GATFileCPI GATFileCPI_Create(unsigned long int version, GATFileCPI_Data *data)
00085 {
00086 GATFileCPI new_cpi = NULL;
00087
00088 if (version <= GATFILECPI_VERSION)
00089 {
00090 if (version == GATFILECPI_VERSION &&
00091 GATTrue == GATFileCPI_IsValidData_V1(data))
00092 {
00093 new_cpi = (GATFileCPI)malloc(sizeof(struct GATFileCPI_S));
00094 if(NULL != new_cpi)
00095 {
00096 new_cpi->data = data->data;
00097 new_cpi->destroy = data->destroy;
00098 new_cpi->service_actions = data->service_actions;
00099
00100 new_cpi->destroy_instance = data->destroy_instance;
00101 new_cpi->create_instance = data->create_instance;
00102 new_cpi->equals_instance = data->equals_instance;
00103 new_cpi->clone_instance = data->clone_instance;
00104
00105 new_cpi->serialise = data->serialise;
00106 new_cpi->deserialise = data->deserialise;
00107
00108 new_cpi->copy = data->copy;
00109 new_cpi->move = data->move;
00110 new_cpi->remove = data->remove;
00111 new_cpi->isreadable = data->isreadable;
00112 new_cpi->iswritable = data->iswritable;
00113 new_cpi->length = data->length;
00114 new_cpi->lastwritetime = data->lastwritetime;
00115
00116 new_cpi->get_metrics = data->get_metrics;
00117 new_cpi->get_metric_event = data->get_metric_event;
00118 }
00119 }
00120
00121
00122
00123
00124
00125
00126 else
00127 {
00128
00129
00130 }
00131 }
00132 else
00133 {
00134
00135
00136 }
00137 return new_cpi;
00138 }
00139
00140
00141
00142
00143
00144
00145
00146
00147 void GATFileCPI_Destroy(GATFileCPI *cpi)
00148 {
00149 if(NULL != cpi && NULL != *cpi)
00150 {
00151 (*cpi)->destroy((*cpi)->data);
00152 free(*cpi);
00153 *cpi = NULL;
00154 }
00155 }
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 GATResult
00168 GATFileCPI_CreateInstance(GATFileCPI cpi, GATFileCPI_Instance *data)
00169 {
00170 return cpi->create_instance(cpi->data, data);
00171 }
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181 void
00182 GATFileCPI_DestroyInstance(GATFileCPI cpi, GATFileCPI_Instance *data)
00183 {
00184 cpi->destroy_instance(cpi->data, data);
00185 }
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200 GATResult
00201 GATFileCPI_EqualsInstance(GATFileCPI cpi, GATFileCPI_Instance const *lhs,
00202 GATFileCPI_Instance const *rhs, GATBool *isequal)
00203 {
00204 return cpi->equals_instance(cpi->data, lhs, rhs, isequal);
00205 }
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218 GATResult
00219 GATFileCPI_CloneInstance(GATFileCPI cpi,
00220 GATFileCPI_Instance const *data, GATFileCPI_Instance *new_data)
00221 {
00222 return cpi->clone_instance(cpi->data, data, new_data);
00223 }
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238 GATResult
00239 GATFileCPI_Serialise(GATFileCPI cpi,
00240 GATFileCPI_Instance const *data, GATObject stream, GATBool clear_dirty)
00241 {
00242 return cpi->serialise(cpi->data, data, stream, clear_dirty);
00243 }
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258 GATResult
00259 GATFileCPI_DeSerialise(GATFileCPI cpi,
00260 GATObject stream, GATFileCPI_Instance *data)
00261 {
00262 return cpi->deserialise(cpi->data, stream, data);
00263 }
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276 GATResult GATFileCPI_Copy(GATFileCPI cpi, GATFileCPI_Instance const *data,
00277 GATLocation_const targetLocation, GATFileMode mode)
00278 {
00279 return cpi->copy(cpi->data, data, targetLocation, mode);
00280 }
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293 GATResult
00294 GATFileCPI_Move(GATFileCPI cpi, GATFileCPI_Instance const *data,
00295 GATLocation_const targetLocation, GATFileMode mode)
00296 {
00297 return cpi->move(cpi->data, data, targetLocation, mode);
00298 }
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310 GATResult
00311 GATFileCPI_Delete(GATFileCPI file, GATFileCPI_Instance const *data)
00312 {
00313 return file->remove(file->data, data);
00314 }
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329 GATResult
00330 GATFileCPI_IsReadable(GATFileCPI cpi, GATFileCPI_Instance const *data)
00331 {
00332 return cpi->isreadable(cpi->data, data);
00333 }
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348 GATResult
00349 GATFileCPI_IsWritable(GATFileCPI cpi, GATFileCPI_Instance const *data)
00350 {
00351 return cpi->iswritable(cpi->data, data);
00352 }
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366 GATResult
00367 GATFileCPI_GetLength(GATFileCPI cpi, GATFileCPI_Instance const *data,
00368 unsigned long *length)
00369 {
00370 return cpi->length(cpi->data, data, length);
00371 }
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385 GATResult
00386 GATFileCPI_LastWriteTime(GATFileCPI cpi,
00387 GATFileCPI_Instance const *data, GATTime *lw_time)
00388 {
00389 return cpi->lastwritetime(cpi->data, data, lw_time);
00390 }
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404 GATResult
00405 GATFileCPI_GetMetrics(GATFileCPI cpi, GATFileCPI_Instance const *data,
00406 GATList_GATMetric *metrics)
00407 {
00408 return cpi->get_metrics(cpi->data, data, metrics);
00409 }
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425 GATResult
00426 GATFileCPI_GetMetricEvent(GATFileCPI cpi, GATFileCPI_Instance const *data,
00427 GATMetric metric, GATMetricEvent *event)
00428 {
00429 return cpi->get_metric_event(cpi->data, data, metric, event);
00430 }
00431
00432
00433 static GATBool
00434 GATFileCPI_IsValidData_V1(GATFileCPI_Data *data)
00435 {
00436 return (
00437 NULL != data->destroy &&
00438
00439
00440 NULL != data->destroy_instance &&
00441 NULL != data->create_instance &&
00442 NULL != data->clone_instance &&
00443 NULL != data->equals_instance &&
00444
00445 NULL != data->serialise &&
00446 NULL != data->deserialise &&
00447
00448 NULL != data->copy &&
00449 NULL != data->move &&
00450 NULL != data->remove &&
00451 NULL != data->isreadable &&
00452 NULL != data->iswritable &&
00453 NULL != data->length &&
00454 NULL != data->lastwritetime &&
00455
00456 NULL != data->get_metrics &&
00457 NULL != data->get_metric_event
00458 ) ? GATTrue : GATFalse;
00459 }