ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-3.0/src/brains/DataStorage.cpp
(Generate patch)

Comparing trunk/OOPSE-3.0/src/brains/DataStorage.cpp (file contents):
Revision 2015 by tim, Sun Feb 13 21:18:27 2005 UTC vs.
Revision 2204 by gezelter, Fri Apr 15 22:04:00 2005 UTC

# Line 1 | Line 1
1 < /*
1 > /*
2   * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3   *
4   * The University of Notre Dame grants you ("Licensee") a
# Line 39 | Line 39
39   * such damages.
40   */
41  
42 < /**
43 <  * @file DataStorage.cpp
44 <  * @author tlin
45 <  * @date 10/26/2004
46 <  * @time 11:56am
47 <  * @version 1.0
48 <  */
42 > /**
43 > * @file DataStorage.cpp
44 > * @author tlin
45 > * @date 10/26/2004
46 > * @time 11:56am
47 > * @version 1.0
48 > */
49  
50   #include "brains/DataStorage.hpp"
51  
52   namespace oopse {
53  
54 < DataStorage::DataStorage() : size_(0), storageLayout_(0){
54 >  DataStorage::DataStorage() : size_(0), storageLayout_(0){
55  
56 < }
56 >  }
57  
58 < DataStorage::DataStorage(int size, int storageLayout) : size_(size){
58 >  DataStorage::DataStorage(int size, int storageLayout) : size_(size){
59      setStorageLayout(storageLayout);
60      resize(size);
61 < }
61 >  }
62  
63 < int DataStorage::getSize() {
63 >  int DataStorage::getSize() {
64  
65      if (storageLayout_ & dslPosition && position.size() != size_) {
66 <        //error
67 <        std::cerr << "size does not match"<< std::endl;
66 >      //error
67 >      std::cerr << "size does not match"<< std::endl;
68      }
69  
70      if (storageLayout_ & dslVelocity && velocity.size() != size_) {
71 <        //error
72 <        std::cerr << "size does not match"<< std::endl;        
71 >      //error
72 >      std::cerr << "size does not match"<< std::endl;        
73      }
74  
75      if (storageLayout_ & dslAmat && aMat.size() != size_) {
76 <        //error
77 <        std::cerr << "size does not match"<< std::endl;        
76 >      //error
77 >      std::cerr << "size does not match"<< std::endl;        
78      }
79  
80      if (storageLayout_ & dslAngularMomentum && angularMomentum.size() != size_) {
81 <        //error
82 <        std::cerr << "size does not match"<< std::endl;        
81 >      //error
82 >      std::cerr << "size does not match"<< std::endl;        
83      }
84  
85      if (storageLayout_ & dslElectroFrame && electroFrame.size() != size_) {
86 <        //error
87 <        std::cerr << "size does not match"<< std::endl;        
86 >      //error
87 >      std::cerr << "size does not match"<< std::endl;        
88      }
89  
90      if (storageLayout_ & dslZAngle && zAngle.size() != size_) {
91 <        //error
92 <        std::cerr << "size does not match"<< std::endl;        
91 >      //error
92 >      std::cerr << "size does not match"<< std::endl;        
93      }
94  
95      if (storageLayout_ & dslForce && force.size() != size_) {
96 <        //error
97 <        std::cerr << "size does not match"<< std::endl;        
96 >      //error
97 >      std::cerr << "size does not match"<< std::endl;        
98      }
99  
100      if (storageLayout_ & dslTorque && torque.size() != size_) {
101 <        //error
102 <        std::cerr << "size does not match"<< std::endl;        
101 >      //error
102 >      std::cerr << "size does not match"<< std::endl;        
103      }
104  
105      return size_;
106  
107 < }
107 >  }
108  
109 < void DataStorage::resize(int newSize) {
109 >  void DataStorage::resize(int newSize) {
110  
111      if (storageLayout_ & dslPosition) {
112 <        internalResize(position, newSize);
112 >      internalResize(position, newSize);
113      }
114  
115      if (storageLayout_ & dslVelocity) {
116 <        internalResize(velocity, newSize);
116 >      internalResize(velocity, newSize);
117      }
118  
119      if (storageLayout_ & dslAmat) {
120 <        internalResize(aMat, newSize);
120 >      internalResize(aMat, newSize);
121      }
122  
123      if (storageLayout_ & dslAngularMomentum) {
124 <        internalResize(angularMomentum, newSize);
124 >      internalResize(angularMomentum, newSize);
125      }
126  
127      if (storageLayout_ & dslElectroFrame) {
128 <        internalResize(electroFrame, newSize);
128 >      internalResize(electroFrame, newSize);
129      }
130      
131      if (storageLayout_ & dslZAngle) {
132 <        internalResize(zAngle, newSize);
132 >      internalResize(zAngle, newSize);
133      }
134  
135      if (storageLayout_ & dslForce) {
136 <        internalResize(force, newSize);
136 >      internalResize(force, newSize);
137      }
138  
139      if (storageLayout_ & dslTorque) {
140 <        internalResize(torque, newSize);
140 >      internalResize(torque, newSize);
141      }
142  
143      size_ = newSize;
144 < }
144 >  }
145  
146 < void DataStorage::reserve(int size) {
146 >  void DataStorage::reserve(int size) {
147      if (storageLayout_ & dslPosition) {
148 <        position.reserve(size);
148 >      position.reserve(size);
149      }
150  
151      if (storageLayout_ & dslVelocity) {
152 <        velocity.reserve(size);
152 >      velocity.reserve(size);
153      }
154  
155      if (storageLayout_ & dslAmat) {
156 <        aMat.reserve(size);
156 >      aMat.reserve(size);
157      }
158  
159      if (storageLayout_ & dslAngularMomentum) {
160 <        angularMomentum.reserve(size);
160 >      angularMomentum.reserve(size);
161      }
162  
163      if (storageLayout_ & dslElectroFrame) {
164 <        electroFrame.reserve(size);
164 >      electroFrame.reserve(size);
165      }
166      
167      if (storageLayout_ & dslZAngle) {
168 <        zAngle.reserve(size);
168 >      zAngle.reserve(size);
169      }
170  
171      if (storageLayout_ & dslForce) {
172 <        force.reserve(size);
172 >      force.reserve(size);
173      }
174  
175      if (storageLayout_ & dslTorque) {
176 <        torque.reserve(size);
176 >      torque.reserve(size);
177      }
178  
179 < }
179 >  }
180  
181 < void DataStorage::copy(int source, int num, int target) {
181 >  void DataStorage::copy(int source, int num, int target) {
182      if (num + target > size_ ) {
183 <        //error
183 >      //error
184      }
185      
186      if (storageLayout_ & dslPosition) {
187 <        internalCopy(position, source, num, target);
187 >      internalCopy(position, source, num, target);
188      }
189  
190      if (storageLayout_ & dslVelocity) {
191 <        internalCopy(velocity, source, num, target);
192 <  }
191 >      internalCopy(velocity, source, num, target);
192 >    }
193  
194      if (storageLayout_ & dslAmat) {
195 <        internalCopy(aMat, source, num, target);
196 <   }
195 >      internalCopy(aMat, source, num, target);
196 >    }
197  
198      if (storageLayout_ & dslAngularMomentum) {
199 <        internalCopy(angularMomentum, source, num, target);
199 >      internalCopy(angularMomentum, source, num, target);
200      }
201  
202      if (storageLayout_ & dslElectroFrame) {
203 <        internalCopy(electroFrame, source, num, target);
203 >      internalCopy(electroFrame, source, num, target);
204      }
205      
206      if (storageLayout_ & dslZAngle) {
207 <        internalCopy(zAngle, source, num, target);
207 >      internalCopy(zAngle, source, num, target);
208      }
209  
210      if (storageLayout_ & dslForce) {
211 <        internalCopy(force, source, num, target);
211 >      internalCopy(force, source, num, target);
212      }
213  
214      if (storageLayout_ & dslTorque) {
215 <        internalCopy(torque, source, num, target);
215 >      internalCopy(torque, source, num, target);
216      }
217      
218  
219 < }
219 >  }
220  
221 < int DataStorage::getStorageLayout() {
221 >  int DataStorage::getStorageLayout() {
222      return storageLayout_;
223 < }
223 >  }
224  
225 < void DataStorage::setStorageLayout(int layout) {
225 >  void DataStorage::setStorageLayout(int layout) {
226      storageLayout_ = layout;
227      resize(size_);
228 < }
228 >  }
229  
230 < double* DataStorage::getArrayPointer(int whichArray) {
230 >  double* DataStorage::getArrayPointer(int whichArray) {
231  
232      switch (whichArray) {
233 <        case dslPosition:
234 <            return internalGetArrayPointer(position);
235 <            break;
233 >    case dslPosition:
234 >      return internalGetArrayPointer(position);
235 >      break;
236              
237 <        case dslVelocity:
238 <            return internalGetArrayPointer(velocity);
239 <            break;
237 >    case dslVelocity:
238 >      return internalGetArrayPointer(velocity);
239 >      break;
240              
241 <        case dslAmat:
242 <            return internalGetArrayPointer(aMat);
243 <            break;            
244 <            
245 <        case dslAngularMomentum:
246 <            return internalGetArrayPointer(angularMomentum);
247 <            break;
241 >    case dslAmat:
242 >      return internalGetArrayPointer(aMat);
243 >      break;            
244              
245 <        case dslElectroFrame:
246 <            return internalGetArrayPointer(electroFrame);
247 <            break;
245 >    case dslAngularMomentum:
246 >      return internalGetArrayPointer(angularMomentum);
247 >      break;
248              
249 <        case dslZAngle:
250 <            return internalGetArrayPointer(zAngle);
251 <            break;
249 >    case dslElectroFrame:
250 >      return internalGetArrayPointer(electroFrame);
251 >      break;
252 >            
253 >    case dslZAngle:
254 >      return internalGetArrayPointer(zAngle);
255 >      break;
256  
257 <        case dslForce:
258 <            return internalGetArrayPointer(force);
259 <            break;            
257 >    case dslForce:
258 >      return internalGetArrayPointer(force);
259 >      break;            
260  
261 <        case dslTorque:
262 <            return internalGetArrayPointer(torque);
263 <            break;  
261 >    case dslTorque:
262 >      return internalGetArrayPointer(torque);
263 >      break;  
264              
265 <        default:
266 <            //error message
267 <            return NULL;
265 >    default:
266 >      //error message
267 >      return NULL;
268  
269      }
270 < }    
270 >  }    
271  
272 < double* DataStorage::internalGetArrayPointer(std::vector<Vector3d>& v) {
272 >  double* DataStorage::internalGetArrayPointer(std::vector<Vector3d>& v) {
273      if (v.size() == 0) {
274 <        return NULL;
274 >      return NULL;
275      } else {
276 <        return v[0].getArrayPointer();
276 >      return v[0].getArrayPointer();
277      }
278 < }
278 >  }
279  
280 < double* DataStorage::internalGetArrayPointer(std::vector<RotMat3x3d>& v) {
280 >  double* DataStorage::internalGetArrayPointer(std::vector<RotMat3x3d>& v) {
281      if (v.size() == 0) {
282 <        return NULL;
282 >      return NULL;
283      } else {
284 <        return v[0].getArrayPointer();
284 >      return v[0].getArrayPointer();
285      }
286  
287 < }
287 >  }
288  
289 < double* DataStorage::internalGetArrayPointer(std::vector<double>& v) {
289 >  double* DataStorage::internalGetArrayPointer(std::vector<double>& v) {
290      if (v.size() == 0) {
291 <        return NULL;
291 >      return NULL;
292      } else {
293 <        return &(v[0]);
293 >      return &(v[0]);
294      }
295  
296 < }    
296 >  }    
297  
298 < template<typename T>
299 < void DataStorage::internalResize(std::vector<T>& v, int newSize){
298 >  template<typename T>
299 >  void DataStorage::internalResize(std::vector<T>& v, int newSize){
300      int oldSize = v.size();
301  
302      if (oldSize == newSize) {
303 <        return;
303 >      return;
304      } else if (oldSize < newSize) {
305 <        v.insert(v.end(), newSize-oldSize, T());
305 >      v.insert(v.end(), newSize-oldSize, T());
306      } else {
307 <        typename std::vector<T>::iterator i;
308 <        i = v.begin();
309 <        std::advance(i, newSize);        
310 <        v.erase(i, v.end());
307 >      typename std::vector<T>::iterator i;
308 >      i = v.begin();
309 >      std::advance(i, newSize);        
310 >      v.erase(i, v.end());
311      }
312 < }
312 >  }
313  
314 < template<typename T>
315 < void DataStorage::internalCopy(std::vector<T>& v, int source,  int num, int target) {
314 >  template<typename T>
315 >  void DataStorage::internalCopy(std::vector<T>& v, int source,  int num, int target) {
316      typename std::vector<T>::iterator first;
317      typename std::vector<T>::iterator last;
318      typename std::vector<T>::iterator result;
# Line 327 | Line 327 | void DataStorage::internalCopy(std::vector<T>& v, int
327      std::advance(result, target );
328  
329      std::copy(first, last, result);
330 < }
330 >  }
331  
332 < int DataStorage::getBytesPerStuntDouble(int layout) {
332 >  int DataStorage::getBytesPerStuntDouble(int layout) {
333      int bytes = 0;
334      if (layout & dslPosition) {
335 <        bytes += sizeof(Vector3d);
335 >      bytes += sizeof(Vector3d);
336      }
337      if (layout & dslVelocity) {
338 <        bytes += sizeof(Vector3d);
338 >      bytes += sizeof(Vector3d);
339      }
340      if (layout & dslAmat) {
341 <        bytes += sizeof(Mat3x3d);    
341 >      bytes += sizeof(Mat3x3d);    
342      }
343      if (layout & dslAngularMomentum) {
344 <        bytes += sizeof(Vector3d);
344 >      bytes += sizeof(Vector3d);
345      }
346      if (layout & dslElectroFrame) {
347 <        bytes += sizeof(Mat3x3d);
347 >      bytes += sizeof(Mat3x3d);
348      }
349      if (layout & dslZAngle) {
350 <        bytes += sizeof(Vector3d);
350 >      bytes += sizeof(Vector3d);
351      }
352      if (layout & dslForce) {
353 <        bytes += sizeof(Vector3d);
353 >      bytes += sizeof(Vector3d);
354      }
355      if (layout & dslTorque) {
356 <        bytes += sizeof(Vector3d);
356 >      bytes += sizeof(Vector3d);
357      }
358      return bytes;
359 < }
359 >  }
360  
361   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines