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

# Content
1 #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 have_members = 0;
14 have_extras = 0;
15 n_members = 0;
16 which = 0;
17
18 }
19
20 RigidBodyStamp::~RigidBodyStamp(){
21 int i;
22
23 if( unhandled != NULL ) delete unhandled;
24
25 free(members);
26
27 }
28
29 char* RigidBodyStamp::assignString( char* lhs, char* rhs ){
30
31 if( unhandled == NULL ) unhandled = new LinkedAssign( lhs, rhs );
32 else unhandled->add( lhs, rhs );
33 have_extras = 1;
34 return NULL;
35
36 }
37
38 char* RigidBodyStamp::assignDouble( char* lhs, double rhs ){
39 int i;
40
41 if( !strcmp( lhs, "nMembers" ) ){
42 n_members = (int)rhs;
43
44 if( have_members ){
45 sprintf( errMsg,
46 "RigidBodyStamp error, nMembers already declared"
47 " for this RigidBody.\n");
48 return strdup( errMsg );
49 }
50 have_members = 1;
51 members = (int *) calloc(n_members, sizeof(int));
52 }
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 if( !strcmp( lhs, "nMembers" ) ){
65 n_members = rhs;
66
67 if( have_members ){
68 sprintf( errMsg,
69 "RigidBodyStamp error, nMembers already declared for"
70 " this RigidBody.\n");
71 return strdup( errMsg );
72 }
73 have_members = 1;
74 members = (int *) calloc(n_members, sizeof(int));
75 }
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 char* RigidBodyStamp::addMember( int atomIndex ){
85
86 if( have_members && which < n_members ) {
87 members[which] = atomIndex;
88 which++;
89 } else {
90 if( have_members ){
91 sprintf( errMsg, "RigidBodyStamp error, %d out of nMembers range",
92 which );
93 return strdup( errMsg );
94 }
95 else return strdup("RigidBodyStamp error, nMembers not given before"
96 " member list declaration." );
97 }
98 return NULL;
99 }
100
101 char* RigidBodyStamp::checkMe( void ){
102
103 int i;
104 short int no_member;
105
106 if( !have_members ){
107 return strdup( "RigidBodyStamp error. RigidBody contains no members." );
108 }
109
110 if (which < n_members) {
111 sprintf( errMsg,
112 "RigidBodyStamp error. Not all of the members were"
113 " declared for this RigidBody.");
114 return strdup( errMsg );
115 }
116
117 return NULL;
118
119 }