ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libBASS/MoleculeStamp.cpp
Revision: 378
Committed: Fri Mar 21 17:42:12 2003 UTC (21 years, 3 months ago) by mmeineke
File size: 6876 byte(s)
Log Message:
This commit was generated by cvs2svn to compensate for changes in r377,
which included commits to RCS files with non-trunk default branches.

File Contents

# User Rev Content
1 mmeineke 377 #include <cstdlib>
2     #include <cstdio>
3     #include <cstring>
4     #include <iostream>
5    
6     #include "MoleculeStamp.hpp"
7    
8     char MoleculeStamp::errMsg[500];
9    
10     MoleculeStamp::MoleculeStamp(){
11    
12     n_atoms = 0;
13     n_bonds = 0;
14     n_bends = 0;
15     n_torsions = 0;
16    
17     unhandled = NULL;
18     atoms = NULL;
19     bonds = NULL;
20     bends = NULL;
21     torsions = NULL;
22    
23     have_name = 0;
24     have_atoms = 0;
25     have_bonds = 0;
26     have_bends = 0;
27     have_torsions = 0;
28    
29     }
30    
31     MoleculeStamp::~MoleculeStamp(){
32     int i;
33    
34     if( unhandled != NULL) delete unhandled;
35    
36     if( atoms != NULL ){
37     for( i=0; i<n_atoms; i++ ) delete atoms[i];
38     }
39    
40     if( bonds != NULL ){
41     for( i=0; i<n_bonds; i++ ) delete bonds[i];
42     }
43    
44     if( bends != NULL ){
45     for( i=0; i<n_bends; i++ ) delete bends[i];
46     }
47    
48     if( torsions != NULL ){
49     for( i=0; i<n_torsions; i++ ) delete torsions[i];
50     }
51    
52     }
53    
54     char* MoleculeStamp::assignString( char* lhs, char* rhs ){
55    
56     if( !strcmp( lhs, "name" ) ){
57     strcpy( name, rhs );
58     have_name = 1;
59     }
60     else{
61     if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
62     else unhandled->add( lhs, rhs );
63     have_extras = 1;
64     }
65     return NULL;
66     }
67    
68     char* MoleculeStamp::assignDouble( char* lhs, double rhs ){
69     int i;
70    
71     if( !strcmp( lhs, "nAtoms" ) ){
72     n_atoms = (int)rhs;
73    
74     if( have_atoms ){
75     sprintf( errMsg,
76     "MoleculeStamp error, n_atoms already declared"
77     "for molecule: %s\n",
78     name);
79     return strdup( errMsg );
80     }
81     have_atoms = 1;
82     atoms = new AtomStamp*[n_atoms];
83     for( i=0; i<n_atoms; i++ ) atoms[i] = NULL;
84     }
85    
86     else if( !strcmp( lhs, "nBonds" ) ){
87     n_bonds = (int)rhs;
88    
89     if( have_bonds ){
90     sprintf( errMsg,
91     "MoleculeStamp error, n_bonds already declared for"
92     " molecule: %s\n",
93     name);
94     return strdup( errMsg );
95     }
96     have_bonds = 1;
97     bonds = new BondStamp*[n_bonds];
98     for( i=0; i<n_bonds; i++ ) bonds[i] = NULL;
99     }
100    
101     else if( !strcmp( lhs, "nBends" ) ){
102     n_bends = (int)rhs;
103    
104     if( have_bends ){
105     sprintf( errMsg,
106     "MoleculeStamp error, n_bends already declared for"
107     " molecule: %s\n",
108     name);
109     return strdup( errMsg );
110     }
111     have_bends = 1;
112     bends = new BendStamp*[n_bends];
113     for( i=0; i<n_bends; i++ ) bends[i] = NULL;
114     }
115    
116     else if( !strcmp( lhs, "nTorsions" ) ){
117     n_torsions = (int)rhs;
118    
119     if( have_torsions ){
120     sprintf( errMsg,
121     "MoleculeStamp error, n_torsions already declared for"
122     " molecule: %s\n",
123     name );
124     return strdup( errMsg );
125     }
126     have_torsions = 1;
127     torsions = new TorsionStamp*[n_torsions];
128     for( i=0; i<n_torsions; i++ ) torsions[i] = NULL;
129     }
130     else{
131     if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
132     else unhandled->add( lhs, rhs );
133     have_extras = 1;
134     }
135     return NULL;
136     }
137    
138     char* MoleculeStamp::assignInt( char* lhs, int rhs ){
139     int i;
140    
141     if( !strcmp( lhs, "nAtoms" ) ){
142     n_atoms = rhs;
143    
144     if( have_atoms ){
145     sprintf( errMsg,
146     "MoleculeStamp error, n_atoms already declared for"
147     " molecule: %s\n",
148     name);
149     return strdup( errMsg );
150     }
151     have_atoms = 1;
152     atoms = new AtomStamp*[n_atoms];
153     for( i=0; i<n_atoms; i++ ) atoms[i] = NULL;
154     }
155    
156     else if( !strcmp( lhs, "nBonds" ) ){
157     n_bonds = rhs;
158    
159     if( have_bonds ){
160     sprintf( errMsg,
161     "MoleculeStamp error, n_bonds already declared for"
162     " molecule: %s\n",
163     name);
164     return strdup( errMsg );
165     }
166     have_bonds = 1;
167     bonds = new BondStamp*[n_bonds];
168     for( i=0; i<n_bonds; i++ ) bonds[i] = NULL;
169     }
170    
171     else if( !strcmp( lhs, "nBends" ) ){
172     n_bends = rhs;
173    
174     if( have_bends ){
175     sprintf( errMsg,
176     "MoleculeStamp error, n_bends already declared for"
177     " molecule: %s\n",
178     name );
179     return strdup( errMsg );
180     }
181     have_bends = 1;
182     bends = new BendStamp*[n_bends];
183     for( i=0; i<n_bends; i++ ) bends[i] = NULL;
184     }
185    
186     else if( !strcmp( lhs, "nTorsions" ) ){
187     n_torsions = rhs;
188    
189     if( have_torsions ){
190     sprintf( errMsg,
191     "MoleculeStamp error, n_torsions already declared for"
192     " molecule: %s\n",
193     name);
194     return strdup( errMsg );
195     }
196     have_torsions = 1;
197     torsions = new TorsionStamp*[n_torsions];
198     for( i=0; i<n_torsions; i++ ) torsions[i] = NULL;
199     }
200     else{
201     if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
202     else unhandled->add( lhs, rhs );
203     have_extras = 1;
204     }
205     return NULL;
206     }
207    
208     char* MoleculeStamp::addAtom( AtomStamp* the_atom, int atomIndex ){
209    
210     if( have_atoms && atomIndex < n_atoms ) atoms[atomIndex] = the_atom;
211     else{
212     if( have_atoms ){
213     sprintf( errMsg, "MoleculeStamp error, %d out of nAtoms range",
214     atomIndex );
215     return strdup( errMsg );
216     }
217     else return strdup("MoleculeStamp error, nAtoms not given before"
218     "first atom declaration." );
219     }
220    
221     return NULL;
222     }
223    
224     char* MoleculeStamp::addBond( BondStamp* the_bond, int bondIndex ){
225    
226    
227     if( have_bonds && bondIndex < n_bonds ) bonds[bondIndex] = the_bond;
228     else{
229     if( have_bonds ){
230     sprintf( errMsg, "MoleculeStamp error, %d out of nBonds range",
231     bondIndex );
232     return strdup( errMsg );
233     }
234     else return strdup("MoleculeStamp error, nBonds not given before"
235     "first bond declaration." );
236     }
237    
238     return NULL;
239     }
240    
241     char* MoleculeStamp::addBend( BendStamp* the_bend, int bendIndex ){
242    
243    
244     if( have_bends && bendIndex < n_bends ) bends[bendIndex] = the_bend;
245     else{
246     if( have_bends ){
247     sprintf( errMsg, "MoleculeStamp error, %d out of nBends range",
248     bendIndex );
249     return strdup( errMsg );
250     }
251     else return strdup("MoleculeStamp error, nBends not given before"
252     "first bend declaration." );
253     }
254    
255     return NULL;
256     }
257    
258     char* MoleculeStamp::addTorsion( TorsionStamp* the_torsion, int torsionIndex ){
259    
260    
261     if( have_torsions && torsionIndex < n_torsions )
262     torsions[torsionIndex] = the_torsion;
263     else{
264     if( have_torsions ){
265     sprintf( errMsg, "MoleculeStamp error, %d out of nTorsions range",
266     torsionIndex );
267     return strdup( errMsg );
268     }
269     else return strdup("MoleculeStamp error, nTorsions not given before"
270     "first torsion declaration." );
271     }
272    
273     return NULL;
274     }
275    
276     char* MoleculeStamp::checkMe( void ){
277    
278     int i;
279     short int no_atom;
280    
281     if( !have_name || !have_atoms ){
282     if( !have_name ) return strdup( "MoleculeStamp error. Molecule's name"
283     " was not given.\n" );
284     else return strdup( "MoleculeStamp error. Molecule contains no atoms." );
285     }
286    
287     no_atom = 0;
288     for( i=0; i<n_atoms; i++ ){
289     if( atoms[i] == NULL ) no_atom = 1;
290     }
291    
292     if( no_atom ){
293     sprintf( errMsg,
294     "MoleculeStamp error. Not all of the atoms were"
295     " declared in molecule \"%s\".\n", name );
296     return strdup( errMsg );
297     }
298    
299     return NULL;
300     }