aboutsummaryrefslogtreecommitdiffhomepage
path: root/tvmet-1.7.1/include/tvmet/Vector.h
diff options
context:
space:
mode:
Diffstat (limited to 'tvmet-1.7.1/include/tvmet/Vector.h')
-rw-r--r--tvmet-1.7.1/include/tvmet/Vector.h317
1 files changed, 0 insertions, 317 deletions
diff --git a/tvmet-1.7.1/include/tvmet/Vector.h b/tvmet-1.7.1/include/tvmet/Vector.h
deleted file mode 100644
index 275355f3e..000000000
--- a/tvmet-1.7.1/include/tvmet/Vector.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Tiny Vector Matrix Library
- * Dense Vector Matrix Libary of Tiny size using Expression Templates
- *
- * Copyright (C) 2001 - 2003 Olaf Petzold <opetzold@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * lesser General Public License for more details.
- *
- * You should have received a copy of the GNU lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: Vector.h,v 1.44 2004/09/16 09:14:18 opetzold Exp $
- */
-
-#ifndef TVMET_VECTOR_H
-#define TVMET_VECTOR_H
-
-#include <iterator> // reverse_iterator
-#include <cassert>
-
-#include <tvmet/tvmet.h>
-#include <tvmet/TypePromotion.h>
-#include <tvmet/CommaInitializer.h>
-
-#include <tvmet/xpr/Vector.h>
-
-namespace tvmet {
-
-
-/* forwards */
-template<class T, int Sz> class Vector;
-
-
-/**
- * \class VectorConstRef Vector.h "tvmet/Vector.h"
- * \brief Const value iterator for ET
- */
-template<class T, int Sz>
-class VectorConstRef
- : public TvmetBase< VectorConstRef<T, Sz> >
-{
-public: // types
- typedef T value_type;
- typedef T* pointer;
- typedef const T* const_pointer;
-
-public:
- /** Dimensions. */
- enum {
- Size = Sz /**< The size of the vector. */
- };
-
-public:
- /** Complexity counter. */
- enum {
- ops = Size
- };
-
-private:
- VectorConstRef();
- VectorConstRef& operator=(const VectorConstRef&);
-
-public:
- /** Constructor. */
- explicit VectorConstRef(const Vector<T, Size>& rhs)
- : m_array(rhs.array())
- { }
-
- /** Constructor by a given memory pointer. */
- explicit VectorConstRef(const_pointer data)
- : m_array(data)
- { }
-
-public: // access operators
- /** access by index. */
- value_type operator()(int i) const {
- assert(i < Size);
- return m_array[i];
- }
-
-public: // debugging Xpr parse tree
- void print_xpr(std::ostream& os, int l=0) const {
- os << IndentLevel(l)
- << "VectorConstRef[O=" << ops << "]<"
- << "T=" << typeid(T).name() << ">,"
- << std::endl;
- }
-
-private:
- const_pointer _tvmet_restrict m_array;
-};
-
-
-/**
- * \class Vector Vector.h "tvmet/Vector.h"
- * \brief Compile time fixed length vector with evaluation on compile time.
- */
-template<class T, int Size>
-class Vector
-{
-public:
- /** Data type of the tvmet::Vector. */
- typedef T value_type;
-
-public:
- /** Complexity counter. */
- enum {
- ops_assign = Size,
- ops = ops_assign,
- use_meta = ops < TVMET_COMPLEXITY_V_ASSIGN_TRIGGER ? true : false
- };
-
-public:
- /** Default Destructor */
- ~Vector() {}
-
- /** Default Constructor. Does nothing. */
- explicit Vector() {}
-
- /** Copy Constructor, not explicit! */
- Vector(const Vector& rhs)
- {
- *this = XprVector<ConstRef, Size>(rhs.constRef());
- }
-
- explicit Vector(const value_type* array)
- {
- for(int i = 0; i < Size; i++) m_array[i] = array[i];
- }
-
- /** Construct a vector by expression. */
- template <class E>
- explicit Vector(const XprVector<E, Size>& e)
- {
- *this = e;
- }
-
- /** Assign a value_type on array, this can be used for a single value
- or a comma separeted list of values. */
- CommaInitializer<Vector, Size> operator=(value_type rhs) {
- return CommaInitializer<Vector, Size>(*this, rhs);
- }
-
-public: // access operators
- value_type* _tvmet_restrict array() { return m_array; }
- const value_type* _tvmet_restrict array() const { return m_array; }
-
-public: // index access operators
- value_type& _tvmet_restrict operator()(int i) {
- // Note: g++-2.95.3 does have problems on typedef reference
- assert(i < Size);
- return m_array[i];
- }
-
- value_type operator()(int i) const {
- assert(i < Size);
- return m_array[i];
- }
-
- value_type& _tvmet_restrict operator[](int i) {
- // Note: g++-2.95.3 does have problems on typedef reference
- return this->operator()(i);
- }
-
- value_type operator[](int i) const {
- return this->operator()(i);
- }
-
-public: // ET interface
- typedef VectorConstRef<T, Size> ConstRef;
-
- /** Return a const Reference of the internal data */
- ConstRef constRef() const { return ConstRef(*this); }
-
- /** Return the vector as const expression. */
- XprVector<ConstRef, Size> expr() const {
- return XprVector<ConstRef, Size>(this->constRef());
- }
-
-private:
- /** Wrapper for meta assign. */
- template<class Dest, class Src, class Assign>
- static inline
- void do_assign(dispatch<true>, Dest& dest, const Src& src, const Assign& assign_fn) {
- meta::Vector<Size, 0>::assign(dest, src, assign_fn);
- }
-
- /** Wrapper for loop assign. */
- template<class Dest, class Src, class Assign>
- static inline
- void do_assign(dispatch<false>, Dest& dest, const Src& src, const Assign& assign_fn) {
- loop::Vector<Size>::assign(dest, src, assign_fn);
- }
-
-public:
- /** assign this to a vector expression using the functional assign_fn. */
- template<class T2, class Assign>
- void assign_to(Vector<T2, Size>& dest, const Assign& assign_fn) const {
- do_assign(dispatch<use_meta>(), dest, *this, assign_fn);
- }
-
-public: // assign operations
- /** assign a given Vector element wise to this vector.
- The operator=(const Vector&) is compiler generated. */
- template<class T2>
- Vector& operator=(const Vector<T2, Size>& rhs) {
- rhs.assign_to(*this, Fcnl_assign<value_type, T2>());
- return *this;
- }
-
- /** assign a given XprVector element wise to this vector. */
- template<class E>
- Vector& operator=(const XprVector<E, Size>& rhs) {
- rhs.assign_to(*this, Fcnl_assign<value_type, typename E::value_type>());
- return *this;
- }
-
-private:
- template<class Obj, int LEN> friend class CommaInitializer;
-
- void commaWrite(int index, T rhs)
- {
- m_array[index] = rhs;
- }
-
-public: // math operators with scalars
- // NOTE: this meaning is clear - element wise ops even if not in ns element_wise
- Vector& operator+=(value_type) _tvmet_always_inline;
- Vector& operator-=(value_type) _tvmet_always_inline;
- Vector& operator*=(value_type) _tvmet_always_inline;
- Vector& operator/=(value_type) _tvmet_always_inline;
-
-public: // math assign operators with vectors
- // NOTE: access using the operators in ns element_wise, since that's what is does
- template <class T2> Vector& M_add_eq(const Vector<T2, Size>&) _tvmet_always_inline;
- template <class T2> Vector& M_sub_eq(const Vector<T2, Size>&) _tvmet_always_inline;
- template <class T2> Vector& M_mul_eq(const Vector<T2, Size>&) _tvmet_always_inline;
- template <class T2> Vector& M_div_eq(const Vector<T2, Size>&) _tvmet_always_inline;
-
-public: // math operators with expressions
- // NOTE: access using the operators in ns element_wise, since that's what is does
- template <class E> Vector& M_add_eq(const XprVector<E, Size>&) _tvmet_always_inline;
- template <class E> Vector& M_sub_eq(const XprVector<E, Size>&) _tvmet_always_inline;
- template <class E> Vector& M_mul_eq(const XprVector<E, Size>&) _tvmet_always_inline;
- template <class E> Vector& M_div_eq(const XprVector<E, Size>&) _tvmet_always_inline;
-
-public: // aliased math operators with expressions, used with proxy
- template <class T2> Vector& alias_assign(const Vector<T2, Size>&) _tvmet_always_inline;
- template <class T2> Vector& alias_add_eq(const Vector<T2, Size>&) _tvmet_always_inline;
- template <class T2> Vector& alias_sub_eq(const Vector<T2, Size>&) _tvmet_always_inline;
- template <class T2> Vector& alias_mul_eq(const Vector<T2, Size>&) _tvmet_always_inline;
- template <class T2> Vector& alias_div_eq(const Vector<T2, Size>&) _tvmet_always_inline;
-
- template <class E> Vector& alias_assign(const XprVector<E, Size>&) _tvmet_always_inline;
- template <class E> Vector& alias_add_eq(const XprVector<E, Size>&) _tvmet_always_inline;
- template <class E> Vector& alias_sub_eq(const XprVector<E, Size>&) _tvmet_always_inline;
- template <class E> Vector& alias_mul_eq(const XprVector<E, Size>&) _tvmet_always_inline;
- template <class E> Vector& alias_div_eq(const XprVector<E, Size>&) _tvmet_always_inline;
-
-public: // io
- /** Structure for info printing as Vector<T, Size>. */
- struct Info : public TvmetBase<Info> {
- std::ostream& print_xpr(std::ostream& os) const {
- os << "Vector<T=" << typeid(value_type).name()
- << ", Sz=" << Size << ">";
- return os;
- }
- };
-
- /** Get an info object of this vector. */
- static Info info() { return Info(); }
-
- /** Member function for expression level printing. */
- std::ostream& print_xpr(std::ostream& os, int l=0) const;
-
- /** Member function for printing internal data. */
- std::ostream& print_on(std::ostream& os) const;
-
-private:
- /** The data of vector self. */
-
- value_type m_array[Size];
-};
-
-typedef Vector<int, 2> Vector2i;
-typedef Vector<int, 3> Vector3i;
-typedef Vector<int, 4> Vector4i;
-typedef Vector<float, 2> Vector2f;
-typedef Vector<float, 3> Vector3f;
-typedef Vector<float, 4> Vector4f;
-typedef Vector<double, 2> Vector2d;
-typedef Vector<double, 3> Vector3d;
-typedef Vector<double, 4> Vector4d;
-
-} // namespace tvmet
-
-#include <tvmet/VectorImpl.h>
-#include <tvmet/VectorFunctions.h>
-#include <tvmet/VectorUnaryFunctions.h>
-#include <tvmet/VectorOperators.h>
-#include <tvmet/VectorEval.h>
-#include <tvmet/AliasProxy.h>
-
-#endif // TVMET_VECTOR_H
-
-// Local Variables:
-// mode:C++
-// End: