1 #ifndef GCP_UTIL_VECTOR_H
2 #define GCP_UTIL_VECTOR_H
11 #include "gcp/util/common/Exception.h"
12 #include "gcp/util/common/LogStream.h"
30 std::ostream& operator<<(std::ostream& os,
33 std::ostringstream& operator<<(std::ostringstream& os,
49 Vector(type el0, type el1, type el2);
119 void push_back(type el);
128 friend std::ostream& gcp::util::operator << <>
134 friend std::ostringstream& gcp::util::operator << <>
153 std::vector<type> data_;
197 data_.resize(vec.data_.size());
198 for(
unsigned i=0; i < vec.data_.size(); i++)
199 data_[i] = vec.data_[i];
227 template <
class type>
232 for(
unsigned iel=0; iel < data_.size(); iel++)
233 sum += data_[iel]*data_[iel];
246 if(i > data_.size()-1) {
247 errStr.initMessage(
true);
248 errStr <<
"Vector has no element: " << i;
264 if(data_.size()==0 || vec.data_.size()==0) {
265 errStr.appendMessage(
true,
"Received vector size of zero");
270 if(data_.size() != vec.data_.size()) {
271 errStr.appendMessage(
true,
"Vectors must have the same size");
278 for(
unsigned i=0; i < data_.size(); i++) {
280 sum = data_[i] * vec.data_[i];
283 sum += data_[i] * vec.data_[i];
296 void Vector<type>::add(Vector<type> vec)
298 data_.insert(data_.end(), vec.data_.begin(), vec.data_.end());
310 if(data_.size()==0 || vec.data_.size()==0) {
311 errStr.appendMessage(
true,
"Received vector size of zero");
316 if(data_.size() != vec.data_.size()) {
317 errStr.appendMessage(
true,
"Vectors must have the same size");
324 for(
unsigned i=0; i < data_.size(); i++)
325 result.data_[i] = (data_[i] + vec.data_[i]);
339 if(data_.size()==0 || vec.data_.size()==0) {
340 errStr.appendMessage(
true,
"Received vector size of zero");
345 if(data_.size() != vec.data_.size()) {
346 errStr.appendMessage(
true,
"Vectors must have the same size");
353 for(
unsigned i=0; i < data_.size(); i++)
354 result.data_[i] = (data_[i] - vec.data_[i]);
368 if(data_.size()==0) {
369 errStr.appendMessage(
true,
"Received vector size of zero");
376 for(
unsigned i=0; i < data_.size(); i++)
377 result.data_[i] = (data_[i] * factor);
391 if(data_.size()==0) {
392 errStr.appendMessage(
true,
"Vector has size of zero");
399 for(
unsigned i=0; i < data_.size(); i++)
400 result.data_[i] = (data_[i] / factor);
414 if(data_.size()==0) {
415 errStr.appendMessage(
true,
"Received vector size of zero");
422 for(
unsigned i=0; i < data_.size(); i++)
423 result.data_[i] = (data_[i] + offset);
437 if(data_.size()==0) {
438 errStr.appendMessage(
true,
"Vector has size of zero");
445 for(
unsigned i=0; i < data_.size(); i++)
446 result.data_[i] = (data_[i] - offset);
454 template <
class type>
455 std::ostream& operator<<(std::ostream& os,
459 for(
unsigned i=0; i < vec.data_.size(); i++) {
462 os << std::setw(18) << std::setprecision(12) << vec.data_[i];
464 os <<
")" << std::ends;
472 template <
class type>
473 std::ostringstream& operator<<(std::ostringstream& os,
474 const Vector<type>& vec)
477 for(
unsigned i=0; i < vec.data_.size(); i++) {
480 os << std::setw(18) << std::setprecision(12) << vec.data_[i];
482 os <<
")" << std::ends;
491 #endif // End #ifndef GCP_UTIL_VECTOR_H
void report()
Definition: LogStream.cc:194
const Vector< type > operator/(const type factor)
Definition: Vector.h:387
type & operator[](unsigned i)
Definition: Vector.h:242
void resize(unsigned n)
Definition: Vector.h:145
unsigned size()
Definition: Vector.h:64
const Vector< type > operator-(const Vector< type > &vec)
Definition: Vector.h:335
Vector()
Definition: Vector.h:167
Definition: LogStream.h:21
double magnitude()
Definition: Vector.h:228
virtual ~Vector()
Definition: Vector.h:222
const type operator*(const Vector< type > &vec)
Definition: Vector.h:260
const Vector< type > operator+(const Vector< type > &vec)
Definition: Vector.h:306