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