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/GATSoftwareDescription.c,v 1.9 2004/04/02 12:31:58 hartmutkaiser Exp $";
00023
00024
00025 #include <stdlib.h>
00026 #include <string.h>
00027
00028
00029 #include "GATInternal.h"
00030 #include "GATErrors.h"
00031 #include "GATType.h"
00032 #include "GATSoftwareDescription.h"
00033 #include "GATXdsWrapper.h"
00034
00035
00036 GATOBJECT_DEFINE_VTABLE(GATSoftwareDescription);
00037 GATSERIALISABLE_DEFINE_VTABLE(GATSoftwareDescription);
00038
00039
00040 GATOBJECT_DEFINE_CONVERTERS(GATSoftwareDescription)
00041
00042
00043
00044
00045 struct GATSoftwareDescription_S {
00046 GATSoftwareDescription_vtable *GATObject__vtable;
00047 GATSoftwareDescription_ISerialisable_vtable *GATSerialisable__vtable;
00048
00049 GATTable attributes;
00050 GATBool isdirty;
00051 };
00052
00053
00054 static int
00055 GATSoftwareDescription_DeSerialise_Create(GATContext context, GATObject stream,
00056 GATTable_const attributes, GATSoftwareDescription *new_object);
00057
00058
00059 GATSoftwareDescription_vtable GATSoftwareDescription__vtable = {
00060 GATSoftwareDescription_GetType,
00061 GATSoftwareDescription_Destroy,
00062 GATSoftwareDescription_Equals,
00063 GATSoftwareDescription_Clone,
00064 GATSoftwareDescription_GetInterface
00065 };
00066
00067 static GATSoftwareDescription_ISerialisable_vtable
00068 GATSoftwareDescription_ISerialisable__vtable =
00069 {
00070 GATSoftwareDescription_Serialise,
00071 GATSoftwareDescription_DeSerialise,
00072 GATSoftwareDescription_GetIsDirty,
00073 };
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 GATResult GATSoftwareDescription_Register_GATSerialisable(void)
00084 {
00085 return GATObject_Register_GATSerialisable(GATType_GATSoftwareDescription,
00086 &GATSoftwareDescription_ISerialisable__vtable);
00087 }
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 GATSoftwareDescription
00102 GATSoftwareDescription_Create(GATTable_const attributes)
00103 {
00104 GATResult err_code = GAT_MEMORYFAILURE;
00105 GATSoftwareDescription retval = (GATSoftwareDescription) malloc(
00106 sizeof(struct GATSoftwareDescription_S));
00107
00108 if (NULL != retval)
00109 {
00110 memset(retval, 0, sizeof(struct GATSoftwareDescription_S));
00111 retval->GATObject__vtable = &GATSoftwareDescription__vtable;
00112 retval->GATSerialisable__vtable = &GATSoftwareDescription_ISerialisable__vtable;
00113 retval->isdirty = GATFalse;
00114
00115 if (NULL != attributes)
00116 {
00117 err_code = GATTable_Clone(attributes, &retval->attributes);
00118 }
00119 else
00120 {
00121 retval->attributes = GATTable_Create();
00122 if (NULL != retval->attributes)
00123 {
00124 err_code = GAT_SUCCESS;
00125 }
00126 }
00127 }
00128
00129
00130 if (GAT_SUCCESS != err_code)
00131 {
00132
00133 if (NULL != retval)
00134 {
00135 GATSoftwareDescription_Destroy(&retval);
00136 }
00137 }
00138 return retval;
00139 }
00140
00141
00142
00143
00144
00145
00146
00147
00148 void
00149 GATSoftwareDescription_Destroy(GATSoftwareDescription *object)
00150 {
00151 if (NULL != object && NULL != *object)
00152 {
00153 GATTable_Destroy(&(*object)->attributes);
00154 free(*object);
00155 *object = NULL;
00156 }
00157 }
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172 GATResult
00173 GATSoftwareDescription_Equals(GATSoftwareDescription_const lhs,
00174 GATSoftwareDescription_const rhs, GATBool *isequal)
00175 {
00176 GATResult retval = GAT_INVALID_HANDLE;
00177
00178 *isequal = GATFalse;
00179 if (NULL != lhs && NULL != rhs)
00180 {
00181 retval = GAT_INVALID_PARAMETER;
00182 if (NULL != isequal)
00183 {
00184 retval = GATTable_Equals(lhs->attributes, rhs->attributes, isequal);
00185 }
00186 }
00187 return retval;
00188 }
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202 GATResult
00203 GATSoftwareDescription_Clone(GATSoftwareDescription_const object,
00204 GATSoftwareDescription *new_object)
00205 {
00206 GATResult retval = GAT_INVALID_PARAMETER;
00207
00208 if (NULL != new_object)
00209 {
00210 *new_object = GATSoftwareDescription_Create(object->attributes);
00211 if (NULL == *new_object)
00212 {
00213 retval = GAT_MEMORYFAILURE;
00214 }
00215 else
00216 {
00217 retval = GAT_SUCCESS;
00218 }
00219 }
00220 return retval;
00221 }
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233 GATType
00234 GATSoftwareDescription_GetType(GATSoftwareDescription_const description)
00235 {
00236 GAT_UNUSED_PARAMETER(description);
00237 return GATType_GATSoftwareDescription;
00238 }
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252 GATResult
00253 GATSoftwareDescription_GetInterface(GATSoftwareDescription_const object,
00254 GATInterface iftype, void const **ifp)
00255 {
00256 GATResult retval = GAT_INVALID_PARAMETER;
00257
00258 if (NULL != ifp)
00259 {
00260 *ifp = NULL;
00261 if (GATInterface_ISerialisable == iftype)
00262 {
00263 *ifp = (void const *) &object->GATSerialisable__vtable;
00264 retval = GAT_SUCCESS;
00265 }
00266 else
00267 {
00268 retval = GAT_NO_INTERFACE;
00269 }
00270 }
00271 return retval;
00272 }
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283 GATTable_const
00284 GATSoftwareDescription_GetAttributes(GATSoftwareDescription_const object)
00285 {
00286 GATTable retval = NULL;
00287 if (NULL != object)
00288 {
00289 retval = object->attributes;
00290 }
00291 return retval;
00292 }
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307 GATResult
00308 GATSoftwareDescription_internal_GetAttributesRef(
00309 GATSoftwareDescription_const object, GATTable *attr)
00310 {
00311 GATResult retval = GAT_INVALID_HANDLE;
00312 if (NULL != object)
00313 {
00314 if (NULL != attr)
00315 {
00316 *attr = object->attributes;
00317 retval = GAT_SUCCESS;
00318 }
00319 else
00320 {
00321 retval = GAT_INVALID_PARAMETER;
00322 }
00323 }
00324 return retval;
00325 }
00326
00327
00328 GATResult
00329 GATSoftwareDescription_SetAttributes(GATSoftwareDescription object,
00330 GATTable_const attributes)
00331 {
00332 GATResult result = GAT_INVALID_HANDLE;
00333 if (NULL != object)
00334 {
00335 GATTable new_attributes = NULL;
00336
00337 result = GATTable_Clone(attributes, &new_attributes);
00338 if (GAT_SUCCESS != result || NULL == new_attributes)
00339 {
00340 GATTable_Destroy(&new_attributes);
00341 result = GAT_MEMORYFAILURE;
00342 }
00343 else
00344 {
00345 GATTable_Destroy(&object->attributes);
00346 object->attributes = new_attributes;
00347 result = GAT_SUCCESS;
00348 }
00349 }
00350 return result;
00351 }
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369 GATResult
00370 GATSoftwareDescription_Serialise(GATSoftwareDescription object,
00371 GATObject stream, GATBool clear_dirty)
00372 {
00373 GATResult retval = GAT_INVALID_HANDLE;
00374 if (NULL != object)
00375 {
00376 retval = GATXds_SerialiseObject(GATSoftwareDescription_ToGATObject(object), stream,
00377 clear_dirty, 0, "uint32 object",
00378 GATSOFTWAREDESCRIPTION_VERSION1, object->attributes, clear_dirty);
00379
00380 if (GAT_SUCCEEDED(retval) && clear_dirty)
00381 {
00382 object->isdirty = GATFalse;
00383 }
00384 }
00385 return retval;
00386 }
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403 static GATBool
00404 GATSoftwareDescription_VersionCallback(GATuint32 version)
00405 {
00406 GATBool retval = GATFalse;
00407 if ((version & ~GATSOFTWAREDESCRIPTION_MINOR_MASK) <= GATSOFTWAREDESCRIPTION_LASTVERSION)
00408 {
00409 retval = GATTrue;
00410 }
00411 return retval;
00412 }
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438 static GATResult
00439 GATSoftwareDescription_DeSerialiseCallback(GATContext context, GATObject stream,
00440 GATObject *new_object, GATuint32 version, va_list args)
00441 {
00442
00443
00444 GATSoftwareDescription object = NULL;
00445 GATTable *attributes = va_arg(args, GATTable *);
00446
00447
00448 GATResult retval = GATSoftwareDescription_DeSerialise_Create(context, stream,
00449 *attributes, &object);
00450 if (GAT_SUCCESS == retval)
00451 {
00452 if (NULL != object)
00453 {
00454 *new_object = GATSoftwareDescription_ToGATObject(object);
00455 }
00456 else
00457 {
00458 GATSoftwareDescription_Destroy(&object);
00459 retval = GAT_INVALID_PARAMETER;
00460 }
00461 }
00462 return retval;
00463 }
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479 GATSoftwareDescription
00480 GATSoftwareDescription_DeSerialise(GATContext context, GATObject stream,
00481 GATResult *result)
00482 {
00483 GAT_USES_STATUS(context, "GATSoftwareDescription_DeSerialise");
00484 GATObject object = NULL;
00485
00486
00487
00488 GATuint32 version = 0;
00489 GATTable attributes = NULL;
00490
00491
00492 GAT_CREATE_STATUS(GATXds_DeSerialiseObject(context, stream,
00493 GATSoftwareDescription_DeSerialiseCallback,
00494 GATSoftwareDescription_VersionCallback, &object,
00495 "uint32 object", &version, &attributes));
00496
00497 GATTable_Destroy(&attributes);
00498
00499 if (NULL != result)
00500 {
00501 *result = GAT_CURRENT_STATUS();
00502 }
00503 else
00504 {
00505 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00506 }
00507 GAT_STORE_STATUS();
00508 return GATObject_ToGATSoftwareDescription(object);
00509 }
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521 GATResult
00522 GATSoftwareDescription_GetIsDirty(GATSoftwareDescription_const object,
00523 GATBool *isdirty)
00524 {
00525 GATResult retval = GAT_INVALID_HANDLE;
00526 if (NULL != object)
00527 {
00528 if (NULL != isdirty)
00529 {
00530 *isdirty = object->isdirty;
00531 retval = GAT_SUCCESS;
00532 }
00533 else
00534 {
00535 retval = GAT_INVALID_PARAMETER;
00536 }
00537 }
00538 return retval;
00539 }
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558 static GATResult
00559 GATSoftwareDescription_DeSerialise_Create(GATContext context, GATObject stream,
00560 GATTable_const attributes, GATSoftwareDescription *object)
00561 {
00562 GAT_USES_STATUS(context, "GATSoftwareDescription_DeSerialise_Create");
00563 GATSoftwareDescription new_object =
00564 (GATSoftwareDescription) malloc(sizeof(struct GATSoftwareDescription_S));
00565
00566 if(NULL != new_object)
00567 {
00568 memset(new_object, 0, sizeof(struct GATSoftwareDescription_S));
00569 new_object->GATObject__vtable = &GATSoftwareDescription__vtable;
00570 new_object->GATSerialisable__vtable = &GATSoftwareDescription_ISerialisable__vtable;
00571
00572 new_object->isdirty = GATFalse;
00573 GAT_CREATE_STATUS(GATTable_Clone(attributes, &new_object->attributes));
00574 }
00575 else
00576 {
00577 GAT_CREATE_STATUS(GAT_MEMORYFAILURE);
00578 }
00579
00580 if (GAT_SUCCEEDED(GAT_CURRENT_STATUS()))
00581 {
00582 if (NULL != new_object)
00583 {
00584 *object = new_object;
00585 }
00586 else
00587 {
00588 GATSoftwareDescription_Destroy(&new_object);
00589 GAT_CREATE_STATUS(GAT_INVALID_PARAMETER);
00590 }
00591 }
00592 else
00593 {
00594 GATSoftwareDescription_Destroy(&new_object);
00595 }
00596 return GAT_RETURN_STATUS();
00597 }
00598