#pragma once
#include "SoundDirectorDll.h"
#include <exception>
namespace pde
{
template <class ValueType, unsigned int vectorWidth>
class VectorTemplate
{
public:
//As this is the first data member, &instance should be the same address as values[3]. But with the overloaded operators, that should be neither here or there I guess!
ValueType* value;
VectorTemplate(void);
VectorTemplate(const VectorTemplate< ValueType, vectorWidth >& rhs);
VectorTemplate(const ValueType rhs[]);
virtual ~VectorTemplate(void);
virtual void ResetValues(void) {} ;
VectorTemplate< ValueType, vectorWidth >& operator = (const VectorTemplate< ValueType, vectorWidth >& rhs);
VectorTemplate< ValueType, vectorWidth >& operator = (const ValueType rhs[]);
const ValueType& operator[] ( int subscript) const;
ValueType& operator[] ( int subscript);
operator ValueType*();
operator const ValueType*() const;
protected:
virtual const char* GenerateRangeErrorString(void) const { return "Subscript out of range for Vector.";} ;
};
template <class ValueType, unsigned int vectorWidth>
VectorTemplate< ValueType, vectorWidth >::VectorTemplate(void)
{
value = new ValueType[vectorWidth];
ResetValues();
}
template <class ValueType, unsigned int vectorWidth>
VectorTemplate< ValueType, vectorWidth >::VectorTemplate(const VectorTemplate< ValueType, vectorWidth > & rhs)
{
value = new ValueType[vectorWidth];
for (unsigned int i=0; i<vectorWidth; ++i)
{
value=rhs.value;
}
}
template <class ValueType, unsigned int vectorWidth>
VectorTemplate< ValueType, vectorWidth >::VectorTemplate(const ValueType rhs[])
{
value = new ValueType[vectorWidth];
for (unsigned int i=0; i<vectorWidth; ++i)
{
value=rhs;
}
}
template <class ValueType, unsigned int vectorWidth>
VectorTemplate< ValueType, vectorWidth >::~VectorTemplate(void)
{
delete[] value;
}
template <class ValueType, unsigned int vectorWidth>
VectorTemplate< ValueType, vectorWidth >& VectorTemplate< ValueType, vectorWidth >::operator = (const VectorTemplate< ValueType, vectorWidth >& rhs)
{
for (unsigned int i=0; i<vectorWidth; ++i)
{
value=rhs.value;
}
return *this;
}
template <class ValueType, unsigned int vectorWidth>
VectorTemplate< ValueType, vectorWidth >& VectorTemplate< ValueType, vectorWidth >::operator = (const ValueType rhs[])
{
for (unsigned int i=0; i<vectorWidth; ++i)
{
value=rhs;
}
return *this;
}
template <class ValueType, unsigned int vectorWidth>
const ValueType& VectorTemplate< ValueType, vectorWidth >::operator [] (int subscript) const
{
if ((subscript<0) || (subscript>=vectorWidth))
{
throw std::out_of_range(GenerateRangeErrorString());
}
return value[subscript];
}
template <class ValueType, unsigned int vectorWidth>
ValueType& VectorTemplate< ValueType, vectorWidth >::operator [] (int subscript)
{
if ((subscript<0) || (subscript>=vectorWidth))
{
throw std::out_of_range(GenerateRangeErrorString());
}
return value[subscript];
}
template <class ValueType, unsigned int vectorWidth>
VectorTemplate< ValueType, vectorWidth >::operator ValueType*()
{
return value;
}
template <class ValueType, unsigned int vectorWidth>
VectorTemplate< ValueType, vectorWidth >::operator const ValueType*() const
{
return value;
}
}
#pragma once
#include "SoundDirectorDll.h"
#include <string>
//#include <Vector>
#include "VectorTemplate.h"
namespace pde
{
class SOUNDDIRECTOR_API Vector3F : public VectorTemplate<float, 3>
{
public:
Vector3F(void);
Vector3F(const float x, const float y, const float z);
Vector3F(const Vector3F& rhs);
Vector3F(const float rhs[]);
virtual ~Vector3F(void);
protected:
virtual void ResetValues(void);
};
}
#include "..\include\vector3f.h"
#include <exception>
using namespace std;
namespace pde
{
Vector3F::Vector3F(void):VectorTemplate<float, 3>()
{
}
Vector3F::Vector3F(const float x, const float y, const float z):VectorTemplate<float, 3>()
{
value[0]=x;
value[1]=y;
value[2]=z;
}
Vector3F::Vector3F(const Vector3F& rhs):VectorTemplate<float, 3>(rhs)
{
}
Vector3F::Vector3F(const float rhs[]):VectorTemplate<float, 3>(rhs)
{
}
Vector3F::~Vector3F(void)
{
}
void Vector3F::ResetValues(void)
{
value[0]=value[1]=value[2]=0;
}
}