[Top][All Lists]
[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>
- [Toon-members] TooN helpers.h,
Georg Klein <=