NAMD
MGridforceParams.C
Go to the documentation of this file.
1 /*
2  * MGridforceParams.C
3  *
4  *
5  * Created by Robert Brunner on 12/5/07.
6  * Copyright 2007 __MyCompanyName__. All rights reserved.
7  *
8  */
9 
10 
11 #include "MGridforceParams.h"
12 #include "MStream.h"
13 
15 {
16  MGFElem* cur = head;
17  MGFElem* found = NULL;
18  MGridforceParams* result = NULL;
19 
20  while (found == NULL && cur != NULL) {
21  if (!strcasecmp((cur->elem).gridforceKey,key)) {
22  found = cur;
23  } else {
24  cur = cur->nxt;
25  }
26  }
27  if (found != NULL) {
28  result = &(found->elem);
29  }
30  return result;
31 }
32 
34 {
35  MGFElem* cur = head;
36  MGFElem* found = NULL;
37  int result = -1;
38 
39  int idx = 0;
40  while (found == NULL && cur != NULL) {
41  if (!strcasecmp((cur->elem).gridforceKey,key)) {
42  found = cur;
43  } else {
44  cur = cur->nxt;
45  idx++;
46  }
47  }
48  if (found != NULL) {
49  result = idx;
50  }
51  return result;
52 }
53 
55 {
56  MGFElem* cur = head;
57  MGFElem* found = NULL;
58  MGridforceParams* result = NULL;
59 
60  int counter = 0;
61  while (found == NULL && cur != NULL) {
62  if (counter == idx) {
63  found = cur;
64  } else {
65  cur = cur->nxt;
66  counter++;
67  }
68  }
69  if (found != NULL) {
70  result = &(found->elem);
71  }
72  return result;
73 }
74 
75 
77 {
78  // If the key is already in the list, we can't add it
79  if (find_key(key)!=NULL) {
80  return NULL;
81  }
82 
83  MGFElem* new_elem = new MGFElem();
84  int len = strlen(key);
85  MGridforceParams* elem = &(new_elem->elem);
86  elem->gridforceKey = new char[len+1];
87  strncpy(elem->gridforceKey,key,len+1);
88  elem->gridforceVfile = NULL;
89  elem->gridforceFile = NULL;
90  elem->gridforceCol = NULL;
91  elem->gridforceQcol = NULL;
92  elem->next = NULL;
93  new_elem->nxt = NULL;
94  if (head == NULL) {
95  head = new_elem;
96  }
97  if (tail != NULL) {
98  tail->nxt = new_elem;
99  tail->elem.next = elem;
100  }
101  tail = new_elem;
102  n_elements++;
103 
104  return elem;
105 }
106 
108 {
109  int i = n_elements;
110  msg->put(n_elements);
111  MGridforceParams *elem = get_first();
112  while (elem != NULL) {
113  int len;
114  len = strlen(elem->gridforceKey) + 1;
115  msg->put(len);
116  msg->put(len,elem->gridforceKey);
117 
118  len = strlen(elem->gridforceVfile) + 1;
119  msg->put(len);
120  msg->put(len,elem->gridforceVfile);
121 
122  Vector v = elem->gridforceScale;
123  msg->put(&v);
124 
125  len = strlen(elem->gridforceFile) + 1;
126  msg->put(len);
127  msg->put(len,elem->gridforceFile);
128 
129  len = strlen(elem->gridforceCol) + 1;
130  msg->put(len);
131  msg->put(len,elem->gridforceCol);
132 
133  if (elem->gridforceQcol == NULL)
134  msg->put(1); // Qcol_is_null = true
135  else {
136  msg->put(0); // Qcol_is_null = false
137  len = strlen(elem->gridforceQcol) + 1;
138  msg->put(len);
139  msg->put(len,elem->gridforceQcol);
140  }
141 
142  v = elem->gridforceVOffset;
143  msg->put(&v);
144 
145  short boolvals[6];
146  boolvals[0] = (elem->gridforceCont[0] ? 1 : 0);
147  boolvals[1] = (elem->gridforceCont[1] ? 1 : 0);
148  boolvals[2] = (elem->gridforceCont[2] ? 1 : 0);
149  boolvals[3] = (elem->gridforceVolts ? 1 : 0);
150  boolvals[4] = (elem->gridforceLite ? 1 : 0);
151  boolvals[5] = (elem->gridforceCheckSize ? 1 : 0);
152  msg->put(6,boolvals);
153 
154  i--;
155  elem = elem->next;
156  }
157  if (i != 0) {
158  NAMD_die("MGridforceParams message packing error\n");
159  }
160  return;
161 }
162 
164 {
165  int elements;
166  msg->get(elements);
167 
168  for(int i=0; i < elements; i++) {
169  // Get key
170  int len;
171  msg->get(len);
172  char *key = new char[len];
173  msg->get(len,key);
174  MGridforceParams *elem = add(key);
175 
176  msg->get(len);
177  char *str = new char[len];
178  msg->get(len,str);
179  elem->gridforceVfile = str;
180 
181  Vector v;
182  msg->get(&v);
183  elem->gridforceScale = v;
184 
185  msg->get(len);
186  str = new char[len];
187  msg->get(len,str);
188  elem->gridforceFile = str;
189 
190  msg->get(len);
191  str = new char[len];
192  msg->get(len,str);
193  elem->gridforceCol = str;
194 
195  int qcol_is_null;
196  msg->get(qcol_is_null);
197  if (qcol_is_null)
198  elem->gridforceQcol = NULL;
199  else {
200  msg->get(len);
201  str = new char[len];
202  msg->get(len,str);
203  elem->gridforceQcol = str;
204  }
205 
206  msg->get(&v);
207  elem->gridforceVOffset = v;
208 
209  short boolvals[6];
210  msg->get(6,boolvals);
211  elem->gridforceCont[0] = ( boolvals[0] != 0 );
212  elem->gridforceCont[1] = ( boolvals[1] != 0 );
213  elem->gridforceCont[2] = ( boolvals[2] != 0 );
214  elem->gridforceVolts = ( boolvals[3] != 0 );
215  elem->gridforceLite = ( boolvals[4] != 0 );
216  elem->gridforceCheckSize = ( boolvals[5] != 0 );
217 
218  delete [] key;
219  }
220 }
221 
Definition: Vector.h:72
MIStream * get(char &data)
Definition: MStream.h:29
MGridforceParams * get_first()
int index_for_key(const char *key)
MGridforceParams * find_key(const char *key)
void NAMD_die(const char *err_msg)
Definition: common.C:147
void unpack_data(MIStream *msg)
MGridforceParams * add(const char *key)
MGridforceParams * next
MOStream * put(char data)
Definition: MStream.h:112
void pack_data(MOStream *msg)
MGridforceParams * at_index(int idx)