1 
2 /*
3  * (c) Schrodinger, Inc.
4  */
5 
6 #include"BondTypeHistory.h"
7 #include"MemoryDebug.h"
8 
9 #define COPY_ATTR(attr_name) dest->attr_name = src->attr_name
10 #define COPY_ATTR_ARR_2(attr_name) dest->attr_name[0] = src->attr_name[0]; dest->attr_name[1] = src->attr_name[1]
11 #define COPY_ATTR_N(attr_name, N) memcpy( dest->attr_name, src->attr_name, N)
12 
13 template <typename fromVersion, typename toVersion>
Copy_BondType(const fromVersion * src,toVersion * dest)14 void Copy_BondType(const fromVersion *src,  toVersion *dest){
15   COPY_ATTR(index[0]);
16   COPY_ATTR(index[1]);
17   COPY_ATTR(order);
18   COPY_ATTR(id);
19   COPY_ATTR(unique_id);
20   COPY_ATTR(stereo);
21   COPY_ATTR(has_setting);
22 }
23 
24 template <typename fromVersion, typename toVersion>
CopyN_BondType(const fromVersion * src,toVersion * dest,int NBond)25 void CopyN_BondType(const fromVersion *src,  toVersion *dest, int NBond){
26   for (int a = 0; a < NBond; ++a){
27     Copy_BondType(src++, dest++);
28   }
29 }
30 
31 template <typename toVersion>
CreateAndCopyN_BondType(const BondType * src,int NBond)32 toVersion *CreateAndCopyN_BondType(const BondType *src, int NBond){
33   toVersion *dest = VLACalloc(toVersion, NBond);
34   toVersion *origdest = dest;
35   for (int a = 0; a < NBond; ++a){
36     Copy_BondType(src++, dest++);
37   }
38   return origdest;
39 }
40 
Copy_Into_BondType_From_Version(const void * src,int bondInfo_version,BondType * Bond,int NBond)41 void Copy_Into_BondType_From_Version(const void *src, int bondInfo_version, BondType *Bond, int NBond){
42   switch(bondInfo_version){
43   case 176:
44     CopyN_BondType((BondType_1_7_6*)src, Bond, NBond);
45     break;
46   case 177:
47     CopyN_BondType((BondType_1_7_7*)src, Bond, NBond);
48     break;
49   case 181:
50     CopyN_BondType((BondType_1_8_1*)src, Bond, NBond);
51     break;
52   default:
53       printf("ERROR: unknown bondInfo_version=%d from BondInfoVERSION=%d\n", bondInfo_version, BondInfoVERSION);
54   }
55 }
56 
Copy_To_BondType_Version(int bondInfo_version,BondType * Bond,int NBond)57 void *Copy_To_BondType_Version(int bondInfo_version, BondType *Bond, int NBond){
58   switch (bondInfo_version){
59   case 176:
60     return CreateAndCopyN_BondType<BondType_1_7_6>(Bond, NBond);
61     break;
62   case 177:
63     return CreateAndCopyN_BondType<BondType_1_7_7>(Bond, NBond);
64     break;
65   case 181:
66     return CreateAndCopyN_BondType<BondType_1_8_1>(Bond, NBond);
67     break;
68   default:
69       printf("ERROR: Copy_To_BondType_Version: unknown bondInfo_version=%d from BondInfoVERSION=%d\n", bondInfo_version, BondInfoVERSION);
70   }
71   return nullptr;
72 
73 }
74