Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

MGridforceParams.C

Go to the documentation of this file.
00001 /*
00002  *  MGridforceParams.C
00003  *  
00004  *
00005  *  Created by Robert Brunner on 12/5/07.
00006  *  Copyright 2007 __MyCompanyName__. All rights reserved.
00007  *
00008  */
00009  
00010 
00011 #include "MGridforceParams.h"
00012 
00013 MGridforceParams* MGridforceParamsList::find_key(const char* key)
00014 {
00015     MGFElem* cur = head;
00016     MGFElem* found = NULL;
00017     MGridforceParams* result = NULL;
00018     
00019     while (found == NULL && cur != NULL) {
00020        if (!strcasecmp((cur->elem).gridforceKey,key)) {
00021         found = cur;
00022       } else {
00023         cur = cur->nxt;
00024       }
00025     }
00026     if (found != NULL) {
00027       result = &(found->elem);
00028     }
00029     return result;
00030 }
00031   
00032 int MGridforceParamsList::index_for_key(const char* key)
00033 {
00034     MGFElem* cur = head;
00035     MGFElem* found = NULL;
00036     int result = -1;
00037     
00038     int idx = 0;
00039     while (found == NULL && cur != NULL) {
00040        if (!strcasecmp((cur->elem).gridforceKey,key)) {
00041         found = cur;
00042       } else {
00043         cur = cur->nxt;
00044         idx++;
00045       }
00046     }
00047     if (found != NULL) {
00048         result = idx;
00049     }
00050     return result;
00051 }
00052   
00053 MGridforceParams* MGridforceParamsList::add(const char* key) 
00054 {
00055     // If the key is already in the list, we can't add it
00056     if (find_key(key)!=NULL) {
00057       return NULL;
00058     }
00059     
00060     MGFElem* new_elem = new MGFElem();
00061     int len = strlen(key);
00062     MGridforceParams* elem = &(new_elem->elem);
00063     elem->gridforceKey = new char[len+1];
00064     strncpy(elem->gridforceKey,key,len+1);
00065     elem->gridforceVfile = NULL;
00066     elem->gridforceFile = NULL;
00067     elem->gridforceCol = NULL;
00068     elem->gridforceQcol = NULL;
00069     elem->next = NULL;
00070     new_elem->nxt = NULL;
00071     if (head == NULL) {
00072       head = new_elem;
00073     }
00074     if (tail != NULL) {
00075       tail->nxt = new_elem;
00076       tail->elem.next = elem;
00077     }
00078     tail = new_elem;
00079     n_elements++;
00080     
00081     return elem;
00082 }
00083   
00084 void MGridforceParamsList::pack_data(MOStream *msg) 
00085 {
00086     int i = n_elements;
00087     msg->put(n_elements);
00088     MGridforceParams *elem = get_first();
00089     while (elem != NULL) {
00090       int len;
00091       len = strlen(elem->gridforceKey) + 1;
00092       msg->put(len);
00093       msg->put(len,elem->gridforceKey);
00094 
00095       len = strlen(elem->gridforceVfile) + 1;
00096       msg->put(len);
00097       msg->put(len,elem->gridforceVfile);
00098 
00099       Vector v = elem->gridforceScale;
00100       msg->put(&v);
00101       
00102       len = strlen(elem->gridforceFile) + 1;
00103       msg->put(len);
00104       msg->put(len,elem->gridforceFile);
00105       
00106       len = strlen(elem->gridforceCol) + 1;
00107       msg->put(len);
00108       msg->put(len,elem->gridforceCol);
00109       
00110       if (elem->gridforceQcol == NULL) 
00111         msg->put(1); // Qcol_is_null = true
00112       else {
00113         msg->put(0); // Qcol_is_null = false
00114         len = strlen(elem->gridforceQcol) + 1;
00115         msg->put(len);
00116         msg->put(len,elem->gridforceQcol);
00117       }
00118       
00119       v = elem->gridforceVOffset;
00120       msg->put(&v);
00121       
00122       short boolvals[5];
00123       boolvals[0] = (elem->gridforceCont[0] ? 1 : 0);
00124       boolvals[1] = (elem->gridforceCont[1] ? 1 : 0);
00125       boolvals[2] = (elem->gridforceCont[2] ? 1 : 0);
00126       boolvals[3] = (elem->gridforceVolts ? 1 : 0);
00127       boolvals[4] = (elem->gridforceLite ? 1 : 0);
00128       msg->put(5,boolvals);
00129       
00130       i--;
00131       elem = elem->next;
00132     }
00133     if (i != 0) {
00134       NAMD_die("MGridforceParams message packing error\n");
00135     }
00136     return;
00137 }
00138   
00139 void MGridforceParamsList::unpack_data(MIStream *msg)
00140 {
00141     int elements;
00142     msg->get(elements);
00143     
00144     for(int i=0; i < elements; i++) {
00145       // Get key
00146       int len;
00147       msg->get(len);
00148       char *key = new char[len];
00149       msg->get(len,key);
00150       MGridforceParams *elem = add(key);
00151       
00152       msg->get(len);
00153       char *str = new char[len];
00154       msg->get(len,str);
00155       elem->gridforceVfile = str;
00156 
00157       Vector v;
00158       msg->get(&v);
00159       elem->gridforceScale = v;
00160       
00161       msg->get(len);
00162       str = new char[len];
00163       msg->get(len,str);
00164       elem->gridforceFile = str;
00165       
00166       msg->get(len);
00167       str = new char[len];
00168       msg->get(len,str);
00169       elem->gridforceCol = str;
00170       
00171       int qcol_is_null;
00172       msg->get(qcol_is_null);
00173       if (qcol_is_null)
00174         elem->gridforceQcol = NULL;
00175       else {
00176         msg->get(len);
00177         str = new char[len];
00178         msg->get(len,str);
00179         elem->gridforceQcol = str;
00180       }
00181       
00182       msg->get(&v);
00183       elem->gridforceVOffset = v;
00184       
00185       short boolvals[5];
00186       msg->get(5,boolvals);
00187       elem->gridforceCont[0] = ( boolvals[0] != 0 );
00188       elem->gridforceCont[1] = ( boolvals[1] != 0 );
00189       elem->gridforceCont[2] = ( boolvals[2] != 0 );
00190       elem->gridforceVolts = ( boolvals[3] != 0 );
00191       elem->gridforceLite = ( boolvals[4] != 0 );
00192       
00193       delete [] key;
00194     }
00195 }
00196   

Generated on Sat May 18 04:07:17 2013 for NAMD by  doxygen 1.3.9.1