ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libBASS/RigidBodyStamp.cpp
Revision: 1099
Committed: Mon Apr 12 20:33:12 2004 UTC (20 years, 2 months ago) by gezelter
File size: 2581 byte(s)
Log Message:
Changes for RigidBody dynamics

File Contents

# User Rev Content
1 gezelter 957 #include <stdlib.h>
2     #include <stdio.h>
3     #include <string.h>
4     #include <iostream>
5    
6     #include "RigidBodyStamp.hpp"
7    
8     char RigidBodyStamp::errMsg[500];
9    
10     RigidBodyStamp::RigidBodyStamp(){
11    
12     unhandled = NULL;
13 gezelter 988 have_members = 0;
14 gezelter 957 have_extras = 0;
15 gezelter 988 n_members = 0;
16 gezelter 998 which = 0;
17    
18 gezelter 957 }
19    
20     RigidBodyStamp::~RigidBodyStamp(){
21     int i;
22    
23     if( unhandled != NULL ) delete unhandled;
24 gezelter 1099
25 gezelter 998 free(members);
26    
27 gezelter 957 }
28    
29     char* RigidBodyStamp::assignString( char* lhs, char* rhs ){
30    
31 gezelter 982 if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
32     else unhandled->add( lhs, rhs );
33     have_extras = 1;
34 gezelter 957 return NULL;
35 gezelter 998
36 gezelter 957 }
37    
38     char* RigidBodyStamp::assignDouble( char* lhs, double rhs ){
39     int i;
40    
41 gezelter 988 if( !strcmp( lhs, "nMembers" ) ){
42     n_members = (int)rhs;
43    
44     if( have_members ){
45 gezelter 957 sprintf( errMsg,
46 gezelter 988 "RigidBodyStamp error, nMembers already declared"
47 gezelter 982 " for this RigidBody.\n");
48 gezelter 957 return strdup( errMsg );
49     }
50 gezelter 988 have_members = 1;
51 gezelter 998 members = (int *) calloc(n_members, sizeof(int));
52 gezelter 957 }
53     else {
54     if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
55     else unhandled->add( lhs, rhs );
56     have_extras = 1;
57     }
58     return NULL;
59     }
60    
61     char* RigidBodyStamp::assignInt( char* lhs, int rhs ){
62     int i;
63    
64 gezelter 988 if( !strcmp( lhs, "nMembers" ) ){
65     n_members = rhs;
66 gezelter 957
67 gezelter 988 if( have_members ){
68 gezelter 957 sprintf( errMsg,
69 gezelter 988 "RigidBodyStamp error, nMembers already declared for"
70 gezelter 982 " this RigidBody.\n");
71 gezelter 957 return strdup( errMsg );
72     }
73 gezelter 988 have_members = 1;
74 gezelter 998 members = (int *) calloc(n_members, sizeof(int));
75 gezelter 957 }
76     else {
77     if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
78     else unhandled->add( lhs, rhs );
79     have_extras = 1;
80     }
81     return NULL;
82     }
83    
84 gezelter 998 char* RigidBodyStamp::addMember( int atomIndex ){
85    
86     if( have_members && which < n_members ) {
87     members[which] = atomIndex;
88     which++;
89     } else {
90 gezelter 988 if( have_members ){
91     sprintf( errMsg, "RigidBodyStamp error, %d out of nMembers range",
92 gezelter 998 which );
93 gezelter 957 return strdup( errMsg );
94     }
95 gezelter 988 else return strdup("RigidBodyStamp error, nMembers not given before"
96 gezelter 998 " member list declaration." );
97 gezelter 957 }
98     return NULL;
99     }
100    
101     char* RigidBodyStamp::checkMe( void ){
102    
103     int i;
104 gezelter 988 short int no_member;
105 gezelter 957
106 gezelter 988 if( !have_members ){
107     return strdup( "RigidBodyStamp error. RigidBody contains no members." );
108 gezelter 957 }
109 gezelter 998
110     if (which < n_members) {
111 gezelter 957 sprintf( errMsg,
112 gezelter 988 "RigidBodyStamp error. Not all of the members were"
113 gezelter 998 " declared for this RigidBody.");
114 gezelter 957 return strdup( errMsg );
115     }
116    
117     return NULL;
118    
119     }