toon-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Toon-members] TooN vaccessor.hh


From: Edward Rosten
Subject: [Toon-members] TooN vaccessor.hh
Date: Tue, 05 Dec 2006 00:35:36 +0000

CVSROOT:        /cvsroot/toon
Module name:    TooN
Changes by:     Edward Rosten <edrosten>        06/12/05 00:35:36

Modified files:
        .              : vaccessor.hh 

Log message:
        Iterators for all VAccessor types.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/vaccessor.hh?cvsroot=toon&r1=1.11&r2=1.12

Patches:
Index: vaccessor.hh
===================================================================
RCS file: /cvsroot/toon/TooN/vaccessor.hh,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- vaccessor.hh        23 Jul 2006 10:17:11 -0000      1.11
+++ vaccessor.hh        5 Dec 2006 00:35:36 -0000       1.12
@@ -82,6 +82,28 @@
   inline DynamicMatrix<DynamicMAccessor<ColMajor> > as_col(); //
   inline void set(int size, double* values) { my_size = size;  my_values = 
values; }
   
+  typedef double* iterator;
+  typedef const double* const_iterator;
+
+  iterator begin()
+  {
+       return my_values;
+  }
+
+  iterator end()
+  {
+       return my_values + my_size;
+  }
+
+  const_iterator begin() const
+  {
+       return my_values;
+  }    
+  const_iterator end() const
+  {
+       return my_values + my_size;
+  }
+  
  protected:  
   int my_size;
   double* my_values;
@@ -158,6 +180,56 @@
 
   inline void set(int size, int skip, double* values) { my_size = size; 
my_skip = skip; my_values = values; }
 
+  private:
+         template<class T> class It: public 
std::iterator<std::random_access_iterator_tag, double>
+         {
+               private:
+                 T* d;
+                 int skip;
+               public:
+                 bool operator!=(const It&i){return d != i.d;}
+                 bool operator==(const It&i){return d == i.d;}
+                 bool operator<=(const It&i){return d <= i.d;}
+                 bool operator>=(const It&i){return d >= i.d;}
+                 bool operator<(const It&i){return d < i.d;}
+                 bool operator>(const It&i){return d > i.d;}
+                 It& operator+=(ptrdiff_t i) {d += i*skip;return *this;}
+                 It& operator-=(ptrdiff_t i) {d -= i*skip;return *this;}
+                 It& operator++() {d += skip;return *this;}
+                 It& operator--() {d -= skip;return *this;}
+                 It operator++(int) {T* t=d;d += skip;return iterator(t,skip);}
+                 It operator--(int) {T* t=d;d -= skip;return iterator(t,skip);}
+                 It operator+(ptrdiff_t i) {return It(d + i*skip,skip);}
+                 It operator-(ptrdiff_t i) {return It(d - i*skip,skip);}
+                 ptrdiff_t operator-(const It& i) {return (d - i.d)/skip;};
+                 T& operator*(){return *d;}
+                 It(T*a, int s):d(a),skip(s){}
+         };
+
+  public:
+
+  typedef It<double> iterator;
+  typedef It<const double> const_iterator;
+
+  iterator begin()
+  {
+       return iterator(my_values, my_skip);
+  }
+
+  iterator end()
+  {
+       return iterator(my_values, my_skip) + my_size;
+  }
+
+  const_iterator begin() const
+  {
+       return const_iterator(my_values, my_skip);
+  }    
+  const_iterator end() const
+  {
+       return const_iterator(my_values, my_skip) + my_size;
+  }
+
  protected:
   int my_size;
   int my_skip;
@@ -235,6 +307,28 @@
     return reinterpret_cast<const 
FixedMatrix<1,Size,FixedMAccessor<1,Size,RowMajor,Stack<Size> > >&> 
(*parent::my_values);
   }
   
+  typedef double* iterator;
+  typedef const double* const_iterator;
+
+  iterator begin()
+  {
+       return parent::my_values;
+  }
+
+  iterator end()
+  {
+       return parent::my_values + Size;
+  }
+
+  const_iterator begin() const
+  {
+       return parent::my_values;
+  }    
+  const_iterator end() const
+  {
+       return parent::my_values + Size;
+  }
+
 };
 
 
@@ -303,6 +397,55 @@
     return reinterpret_cast<const 
FixedMatrix<1,Size,SkipMAccessor<1,Size,Skip,ColMajor> >&>(*parent::my_values);
   }
 
+  private:
+         template<class T> class It: public 
std::iterator<std::random_access_iterator_tag, double>
+         {
+               private:
+                 T* d;
+               public:
+                 bool operator!=(const It&i){return d != i.d;}
+                 bool operator==(const It&i){return d == i.d;}
+                 bool operator<=(const It&i){return d <= i.d;}
+                 bool operator>=(const It&i){return d >= i.d;}
+                 bool operator<(const It&i){return d < i.d;}
+                 bool operator>(const It&i){return d > i.d;}
+                 It& operator+=(ptrdiff_t i) {d += i*Skip;return *this;}
+                 It& operator-=(ptrdiff_t i) {d -= i*Skip;return *this;}
+                 It& operator++() {d += Skip;return *this;}
+                 It& operator--() {d -= Skip;return *this;}
+                 It operator++(int) {T* t=d;d += Skip;return iterator(t);}
+                 It operator--(int) {T* t=d;d -= Skip;return iterator(t);}
+                 It operator+(ptrdiff_t i) {return It(d + i*Skip);}
+                 It operator-(ptrdiff_t i) {return It(d - i*Skip);}
+                 ptrdiff_t operator-(const It& i) {return (d - i.d)/Skip;};
+                 T& operator*(){return *d;}
+                 It(T*a):d(a){}
+         };
+
+  public:
+
+  typedef It<double> iterator;
+  typedef It<const double> const_iterator;
+
+  iterator begin()
+  {
+       return iterator(parent::my_values);
+  }
+
+  iterator end()
+  {
+       return iterator(parent::my_values) + Size;
+  }
+
+  const_iterator begin() const
+  {
+       return iterator(parent::my_values);
+  }    
+  const_iterator end() const
+  {
+       return iterator(parent::my_values) + Size;
+  }
+
 };
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]