toon-members
[Top][All Lists]
Advanced

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

[Toon-members] TooN helpers.h


From: Georg Klein
Subject: [Toon-members] TooN helpers.h
Date: Sat, 01 Mar 2008 18:57:32 +0000

CVSROOT:        /cvsroot/toon
Module name:    TooN
Changes by:     Georg Klein <georgklein>        08/03/01 18:57:32

Modified files:
        .              : helpers.h 

Log message:
        Added extend(Vector), which does the same as unproject(Vector), only
        it adds a zero instead of a one.
        
        (An alternative would have been to change unproject(Vector) to
         unproject(Vector, double=1.0) - anyone feel strongly about this?)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/helpers.h?cvsroot=toon&r1=1.21&r2=1.22

Patches:
Index: helpers.h
===================================================================
RCS file: /cvsroot/toon/TooN/helpers.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- helpers.h   19 Nov 2007 14:15:05 -0000      1.21
+++ helpers.h   1 Mar 2008 18:57:32 -0000       1.22
@@ -41,6 +41,10 @@
 template <int Size, class Accessor> Vector<Size+1>  unproject(const 
FixedVector<Size,Accessor>& v);
 template  <class Accessor> Vector<>                 unproject(const 
DynamicVector<Accessor>& v);
 
+// Extend - same as unproject, but with 0 instead of 1
+template <int Size, class Accessor> Vector<Size+1>  extend(const 
FixedVector<Size,Accessor>& v);
+template  <class Accessor> Vector<>                 extend(const 
DynamicVector<Accessor>& v);
+
 
 // as_vector
 template<int Size> inline FixedVector<Size,FixedVAccessor<Size,Stack<Size> > 
>&  as_vector(double* data);
@@ -178,6 +182,35 @@
   return Vector<>(v,Operator<DynamicVUnproject<Accessor> >());
 }
 
+// Extend
+template <int Size, class Accessor>
+struct FixedVExtend {
+  inline static void eval(Vector<Size+1>& ret, const 
FixedVector<Size,Accessor>& v){
+    ret.template slice<0,Size>() = v;
+    ret[Size]=0;
+  }
+};
+
+template <int Size, class Accessor>
+Vector<Size+1> extend(const FixedVector<Size,Accessor>& v){
+  return Vector<Size+1>(v,Operator<FixedVExtend<Size,Accessor> >());
+}
+
+template <class Accessor>
+struct DynamicVExtend : public VSizer{
+  inline static void eval(Vector<>& ret, const DynamicVector<Accessor>& v){
+    const int size = v.size();
+    set_size(ret,size+1);
+    v.copy_into(ret.get_data_ptr());
+    ret[size]=0;
+  }
+};
+
+template  <class Accessor>
+Vector<> extend(const DynamicVector<Accessor>& v){
+  return Vector<>(v,Operator<DynamicVExtend<Accessor> >());
+}
+
 
 // as_vector<Size>(double*) to convert a pointer to
 // an array of data into a Vector<Size>




reply via email to

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