ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libBASS/RigidBodyStamp.cpp
Revision: 988
Committed: Tue Jan 27 19:37:48 2004 UTC (20 years, 7 months ago) by gezelter
File size: 2821 byte(s)
Log Message:
More BASS changes to do new rigidBody scheme

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