File: Vector.hh

package info (click to toggle)
topcom 0.17.8%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 78,572 kB
  • sloc: cpp: 16,640; sh: 975; makefile: 345; ansic: 40
file content (90 lines) | stat: -rw-r--r-- 2,079 bytes parent folder | download
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