1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
////////////////////////////////////////////////////////////////////////////////
//
// Vector.hh
//
// produced: 21/08/97 jr
// last change: 30/10/97 jr
//
////////////////////////////////////////////////////////////////////////////////
#ifndef VECTOR_HH
#define VECTOR_HH
#include <assert.h>
#include <cmath>
#include <iostream>
#include "Array.hh"
#include "Field.hh"
#include "CommandlineOptions.hh"
typedef Array<Field> vector_data;
class Vector : public vector_data {
public:
// constructors:
inline Vector();
inline Vector(const Vector&);
inline Vector(const Field&);
inline Vector(const size_type, const Field& = ZERO);
// destructor:
inline ~Vector();
// assignment:
inline Vector& operator=(const Vector&);
// accessors:
bool is_zero() const;
// operations in place:
Vector& canonicalize();
Vector& add(const Vector&);
Vector& scale(const Field&);
Vector& stack(const Vector&);
// operations out of place:
friend Field inner_product(const Vector&, const Vector&);
// boolean expressions:
// overload of istream with canonicalize:
inline std::istream& read(std::istream&);
inline friend std::istream& operator>>(std::istream&, Vector&);
};
// helpers:
bool lex_abs_compare(const Vector&, const Vector&, const size_type = 0);
// constructors:
inline Vector::Vector() :
vector_data() {
}
inline Vector::Vector(const Vector& vector) :
vector_data(vector) {
}
inline Vector::Vector(const Field& init_entry) :
vector_data(1, init_entry) {
}
inline Vector::Vector(const size_type init_size, const Field& init_entry) :
vector_data(init_size, init_entry) {
}
// destructor:
inline Vector::~Vector() {}
// assignment:
inline Vector& Vector::operator=(const Vector& vector) {
if (this == &vector) {
return *this;
}
vector_data::operator=(vector);
return *this;
}
inline std::istream& Vector::read(std::istream& ist) {
vector_data::read(ist);
this->canonicalize();
return ist;
}
inline std::istream& operator>>(std::istream& ist, Vector& v) {
return v.read(ist);
}
#endif
// eof Vector.hh
|