Advertisement
WeltEnSTurm

Untitled

Aug 29th, 2012
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1.  
  2. #ifndef WS_MATH_VECTOR_
  3. #define WS_MATH_VECTOR_
  4.  
  5. #include "ws/io.hpp"
  6.  
  7. namespace ws {
  8.     namespace math {
  9.  
  10.         template<size_t length = 3, class type = float>
  11.         class vector {
  12.             //protected:
  13.             public:
  14.                 // public, else I can't do ostream << overload ;_;
  15.                 type data[length];
  16.  
  17.                 vector(){
  18.                     for(size_t i=0; i<length; i++)
  19.                         data[i] = 0;
  20.                 }
  21.                 vector(type array[length]){
  22.                     data = array;
  23.                 }
  24.  
  25.                 vector& operator = (const vector& other){
  26.                     memcpy(data, other.data, length);
  27.                     return (const vector&)*this;
  28.                 }
  29.  
  30.                 type& operator [] (size_t index){
  31.                     return data[index];
  32.                 }
  33.  
  34.                 vector& operator *= (const vector& other){
  35.                     for(size_t i=0; i<length; i++)
  36.                         data[i] *= other[i];   
  37.                     return *this;
  38.                 }
  39.  
  40.                 vector& operator /= (const vector& other){
  41.                     for(size_t i=0; i<length; i++)
  42.                         data[i] /= other[i];   
  43.                     return *this;
  44.                 }
  45.  
  46.                 vector& operator += (const vector& other){
  47.                     for(size_t i=0; i<length; i++)
  48.                         data[i] += other[i];   
  49.                     return *this;
  50.                 }
  51.  
  52.                 const vector& operator -= (const vector& other){
  53.                     for(size_t i=0; i<length; i++)
  54.                         data[i] -= other[i];   
  55.                     return *this;
  56.                 }
  57.  
  58.                 vector operator * (const vector& other) {
  59.                     vector temp;
  60.                     for(size_t i=0; i<length; i++)
  61.                         temp.data[i] = data[i] * other.data[i];
  62.                     return temp;
  63.                 }
  64.  
  65.                 vector operator / (const vector& other) {
  66.                     vector temp;
  67.                     for(size_t i=0; i<length; i++)
  68.                         temp.data[i] = data[i] / other.data[i];
  69.                     return temp;
  70.                 }
  71.  
  72.                 vector operator + (const vector& other) {
  73.                     vector temp;
  74.                     for(size_t i=0; i<length; i++)
  75.                         temp.data[i] = data[i] + other.data[i];
  76.                     return temp;
  77.                 }
  78.  
  79.                 vector operator - (const vector& other) {
  80.                     vector temp;
  81.                     for(size_t i=0; i<length; i++)
  82.                         temp.data[i] = data[i] - other.data[i];
  83.                     return temp;
  84.                 }
  85.  
  86.                 vector operator * (const type& scalar){
  87.                     vector temp;
  88.                     for(size_t i=0; i<length; i++)
  89.                         temp.data[i] = data[i] * scalar;
  90.                     return temp;
  91.                 }
  92.  
  93.                 vector operator / (const type& divisor){
  94.                     vector temp;
  95.                     for(size_t i=0; i<length; i++)
  96.                         temp.data[i] = data[i] / divisor;
  97.                     return temp;
  98.                 }
  99.  
  100.         };
  101.  
  102.     }
  103.  
  104.  
  105.     template<size_t length, class type>
  106.     std::ostream& operator << (std::ostream& o, const math::vector<length, type> out){
  107.         o << "vector(";
  108.         for(size_t i=0; i<length; i++)
  109.             o << out.data[i] << ((i != length-1) ? ", " : ")");
  110.         return o;
  111.     }
  112.  
  113. }
  114.  
  115. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement