NMD
u15.c
Go to the documentation of this file.
00001 #include <stdlib.h>
00002 #include "memory.h"
00003 #include "nmd.h"
00004 
00005 /*! Object cloning including arrays */
00006 int main(int argc,char **argv) {
00007   NMD_metadata nmd,nmd2; NMDErrorCode ierr; 
00008   int i=5; double r=6.7;
00009   int *ii; double *rr;
00010   PetscFunctionBegin;
00011   PetscInitialize(&argc,&argv,0,0);
00012 
00013   ierr = NMDCreateObject(&nmd); NMD_ERR_RETURN(ierr);
00014   ierr = NMDCreateObject(&nmd2); NMD_ERR_RETURN(ierr);
00015 
00016   ierr = NMDSetValue(nmd,"cat1","cmp1",NMDInt,&i); NMD_ERR_RETURN(ierr);
00017   ierr = NMDSetValue(nmd,"cat1","cmp2",NMDReal,&r); NMD_ERR_RETURN(ierr);
00018 
00019 #define ILEN 4
00020   NMD_MALLOC(ii,ILEN,int,"int array");
00021   for (i=0; i<ILEN; i++) ii[i] = 2*i;
00022   ierr = NMDSetArrayValue
00023     (nmd,"cat1","cmp3",NMDIntarray,&ii,ILEN); NMD_ERR_RETURN(ierr);
00024 
00025 #define RLEN 6
00026   NMD_MALLOC(rr,RLEN,NMDRealtype,"real array");
00027   for (i=0; i<RLEN; i++) rr[i] = i*i;
00028   ierr = NMDSetArrayValue
00029     (nmd,"cat1","cmp4",NMDRealarray,&rr,RLEN); NMD_ERR_RETURN(ierr);
00030 
00031   ierr = NMDCloneObject(nmd,nmd2); NMD_ERR_RETURN(ierr);
00032   {
00033     const char *s1,*s2,*s3;
00034     /* report the original object */
00035     ierr = NMDReportObject(nmd,NMDFalse,&s1,&s2,'\n',0,0); NMD_ERR_RETURN(ierr);
00036     printf("original keys:\n%s\nvalues:\n%s\n",s1,s2);
00037     ierr = NMDReportObject(nmd,NMDTrue,NULL,&s3,'\n',0,0); NMD_ERR_RETURN(ierr);
00038     printf("values with arrays:\n%s\n",s3);
00039     NMD_FREE(s1);
00040     NMD_FREE(s2);
00041     NMD_FREE(s3);
00042     /* report the clone */
00043     ierr = NMDReportObject(nmd2,NMDFalse,&s1,&s2,'\n',0,0); NMD_ERR_RETURN(ierr);
00044     printf("clone keys:\n%s\nvalues:\n%s\n",s1,s2);
00045     ierr = NMDReportObject(nmd2,NMDTrue,NULL,&s3,'\n',0,0); NMD_ERR_RETURN(ierr);
00046     printf("values with arrays:\n%s\n",s3);
00047     NMD_FREE(s1);
00048     NMD_FREE(s2);
00049     NMD_FREE(s3);
00050   }
00051 
00052   NMD_FREE(ii);
00053   NMD_FREE(rr);
00054 
00055   ierr = NMDDestroyObject(nmd); NMD_ERR_RETURN(ierr);
00056   ierr = NMDDestroyObject(nmd2); NMD_ERR_RETURN(ierr);
00057 
00058   PetscFinalize();
00059   PetscFunctionReturn(0);
00060 }