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, 5 months ago) by gezelter
File size: 2821 byte(s)
Log Message:
More BASS changes to do new rigidBody scheme

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