src/proto2/Vector.hh
author terom
Tue, 18 Nov 2008 22:58:50 +0000
branchno-netsession
changeset 35 e21cfda0edde
child 41 ca80cd67785d
permissions -rw-r--r--
Merge from at r31:36
35
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     1
#ifndef COOR_H
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     2
#define COOR_H
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     3
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     4
#include <iostream>
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     5
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     6
/**
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     7
 * 2D Vector class. Implements standard vector operations.
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     8
 */
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
     9
template <typename T>
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    10
class _Vector {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    11
public:
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    12
    T x;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    13
    T y;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    14
    
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    15
    _Vector() : x(0), y(0){}
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    16
    /**
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    17
     * @param x Initial x-coordinate.
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    18
     * @param y Initial y-coordinate.
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    19
     */
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    20
    _Vector(T x, T y) : x(x), y(y) {}
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    21
    /**
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    22
     * @param v Other vector to be copied.
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    23
     */
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    24
    _Vector(const _Vector &v) : x(v.x), y(v.y) {}
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    25
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    26
    void operator=(const _Vector &v) {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    27
        this->x = v.x;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    28
        this->y = v.y;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    29
    }
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    30
    _Vector operator+(const _Vector &v) const {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    31
        return _Vector(this->x+v.x, this->y+v.y);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    32
    }
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    33
    _Vector operator-(const _Vector &v) const {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    34
        return _Vector(this->x-v.x, this->y-v.y);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    35
    }
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    36
    _Vector operator*(const T &d) const {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    37
        return _Vector(this->x*d, this->y*d);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    38
    }
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    39
    _Vector operator/(const T &d) const {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    40
        return _Vector(this->x/d, this->y/d);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    41
    } 
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    42
    void operator+=(const _Vector &v) {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    43
        this->x += v.x;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    44
        this->y += v.y;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    45
    }
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    46
    void operator-=(const _Vector &v) {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    47
        this->x -= v.x;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    48
        this->y -= v.y;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    49
    }
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    50
    void operator*=(const T &f) {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    51
        this->x *= f;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    52
        this->y *= f;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    53
    }
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    54
    void operator/=(const T &d) {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    55
        this->x /= d;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    56
        this->y /= d;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    57
    }
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    58
};
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    59
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    60
template<typename T>
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    61
bool operator==(const _Vector<T> &v1, const _Vector<T> &v2) {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    62
    return ((v1.x == v2.x) && (v1.y == v2.y));
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    63
}
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    64
template<typename T>
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    65
bool operator!=(const _Vector<T> &v1, const _Vector<T> &v2) {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    66
    return !(v1 == v2);
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    67
}
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    68
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    69
template<typename T>
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    70
std::ostream& operator<<(std::ostream &s, const _Vector<T> &v) {
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    71
    return s<<"("<<v.x<<", "<<v.y<<")";
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    72
}
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    73
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    74
typedef _Vector<float> Vector;
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    75
e21cfda0edde Merge from at r31:36
terom
parents:
diff changeset
    76
#endif