NMD
u19.c
Go to the documentation of this file.
00001 #include <stdlib.h>
00002 #include "memory.h"
00003 #include "nmd.h"
00004 
00005 /*! Object structure cloning */
00006 int main(int argc,char **argv) {
00007   NMD_metadata nmd1,nmd2,nmd3; NMDErrorCode ierr; NMDTruth flg;
00008   int i;
00009   PetscFunctionBegin;
00010   PetscInitialize(&argc,&argv,0,0);
00011 
00012   ierr = NMDCreateObject(&nmd1); NMD_ERR_RETURN(ierr);
00013   ierr = NMDCreateObject(&nmd2); NMD_ERR_RETURN(ierr);
00014 
00015   /*
00016    * objects 1 and 2 have components in different orders
00017    */
00018   i = 1;
00019   ierr = NMDSetValue(nmd1,"cat1","cmp1",NMDInt,&i); NMD_ERR_RETURN(ierr);
00020   ierr = NMDSetValue(nmd2,"cat1","cmp2",NMDInt,&i); NMD_ERR_RETURN(ierr);
00021   i = 2;
00022   ierr = NMDSetValue(nmd1,"cat1","cmp2",NMDInt,&i); NMD_ERR_RETURN(ierr);
00023   ierr = NMDSetValue(nmd2,"cat1","cmp1",NMDInt,&i); NMD_ERR_RETURN(ierr);
00024 
00025   ierr = NMDCloneObjectStructure(nmd1,&nmd3); NMD_ERR_RETURN(ierr);
00026 
00027   ierr = NMDGetValue
00028     (nmd3,"cat1","cmp1",NULL,(void*)&i,&flg); NMD_ERR_RETURN(ierr);
00029   if (flg) printf("ERROR: Cloned component cmp1 should not be set\n");
00030 
00031   i = 1;
00032   ierr = NMDSetValue(nmd3,"cat1","cmp2",NMDInt,&i); NMD_ERR_RETURN(ierr);
00033   i = 2;
00034   ierr = NMDSetValue(nmd3,"cat1","cmp1",NMDInt,&i); NMD_ERR_RETURN(ierr);
00035 
00036   {
00037     const char *s1,*s2,*s3;
00038     /*
00039      * Get the keys, s1 and s3 should be the same
00040      */
00041     ierr = NMDReportObject
00042       (nmd1,NMDFalse,&s1,NULL,'-',0,0); NMD_ERR_RETURN(ierr);
00043     ierr = NMDReportObject
00044       (nmd2,NMDFalse,&s2,NULL,'-',0,0); NMD_ERR_RETURN(ierr);
00045     ierr = NMDReportObject
00046       (nmd3,NMDFalse,&s3,NULL,'-',0,0); NMD_ERR_RETURN(ierr);
00047     if (strcmp(s1,s3)) {
00048       printf("s1 = <%s> s2 = <%s> s3 = <%s>\n",s1,s2,s3);
00049       NMD_ERR_REPORT(">>>> Error: s1, s3 should be the same\n");
00050     }
00051     NMD_FREE(s1); NMD_FREE(s2); NMD_FREE(s3);
00052     /*
00053      * Get the values, s1 and s2 should be the same
00054      */
00055     ierr = NMDReportObject(nmd1,NMDFalse,NULL,&s1,'-',0,0); NMD_ERR_RETURN(ierr);
00056     ierr = NMDReportObject(nmd2,NMDFalse,NULL,&s2,'-',0,0); NMD_ERR_RETURN(ierr);
00057     ierr = NMDReportObject(nmd3,NMDFalse,NULL,&s3,'-',0,0); NMD_ERR_RETURN(ierr);
00058     if (strcmp(s1,s2)) {
00059       printf("s1 = <%s> s2 = <%s> s3 = <%s>\n",s1,s2,s3);
00060       NMD_ERR_REPORT(">>>> Error: s1, s2 should be the same\n");
00061     }
00062     NMD_FREE(s1); NMD_FREE(s2); NMD_FREE(s3);
00063   }
00064 
00065   ierr = NMDDestroyObject(nmd1); NMD_ERR_RETURN(ierr);
00066   ierr = NMDDestroyObject(nmd2); NMD_ERR_RETURN(ierr);
00067   ierr = NMDDestroyObject(nmd3); NMD_ERR_RETURN(ierr);
00068 
00069   PetscFinalize();
00070   PetscFunctionReturn(0);
00071 }