[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Toon-members] TooN helpers.h internal/vbase.hh test/slice_tes...
From: |
Edward Rosten |
Subject: |
[Toon-members] TooN helpers.h internal/vbase.hh test/slice_tes... |
Date: |
Wed, 26 Aug 2009 09:51:10 +0000 |
CVSROOT: /cvsroot/toon
Module name: TooN
Changes by: Edward Rosten <edrosten> 09/08/26 09:51:10
Modified files:
. : helpers.h
internal : vbase.hh
test : slice_test.cc
Log message:
Reimplemented vector project/unproject using End.
Fixed bugs:
- Added const slices for End.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/helpers.h?cvsroot=toon&r1=1.82&r2=1.83
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/vbase.hh?cvsroot=toon&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/TooN/test/slice_test.cc?cvsroot=toon&r1=1.5&r2=1.6
Patches:
Index: helpers.h
===================================================================
RCS file: /cvsroot/toon/TooN/helpers.h,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -b -r1.82 -r1.83
--- helpers.h 24 Aug 2009 13:25:57 -0000 1.82
+++ helpers.h 26 Aug 2009 09:51:09 -0000 1.83
@@ -98,33 +98,17 @@
///For a vector \e v of length \e i, return \f$[v_1, v_2, \cdots,
v_{i-1}] / v_i \f$
///@param v \e v
///@ingroup gLinAlg
- template<int Size, typename Precision, typename Base> inline
Vector<Size-1, Precision> project( const Vector<Size, Precision, Base> & v){
- return v.template slice<0,Size-1>() / v[Size-1];
- }
-
- /**
- \overload
- */
- template<typename Precision, typename Base> inline Vector<-1,
Precision> project( const Vector<-1, Precision, Base> & v){
- return v.slice(0,v.size()-1) / v[v.size()-1];
+ template<int Size, typename Precision, typename Base> inline
Vector<(Size==Dynamic?Dynamic:Size-1), Precision> project( const Vector<Size,
Precision, Base> & v){
+ return v.template slice<0, End<-1> >() / v[v.size() - 1];
}
+ //This should probably be done with an operator to prevent an extra
new[] for dynamic vectors.
///For a vector \e v of length \e i, return \f$[v_1, v_2, \cdots,
v_{i}, 1]\f$
///@param v \e v
///@ingroup gLinAlg
- template<int Size, typename Precision, typename Base> inline
Vector<Size+1, Precision> unproject( const Vector<Size, Precision, Base> & v){
- Vector<Size+1, Precision> result;
- result.template slice<0,Size>() = v;
- result[Size] = 1;
- return result;
- }
-
- /**
- \overload
- */
- template<typename Precision, typename Base> inline Vector<-1,
Precision> unproject( const Vector<-1, Precision, Base> & v){
- Vector<-1, Precision> result(v.size()+1);
- result.slice(0,v.size()) = v;
+ template<int Size, typename Precision, typename Base> inline
Vector<(Size==Dynamic?Dynamic:Size+1), Precision> unproject( const Vector<Size,
Precision, Base> & v){
+ Vector<(Size==Dynamic?Dynamic:Size+1), Precision>
result(v.size()+1);
+ result.template slice<0,End<-1> >() = v;
result[v.size()] = 1;
return result;
}
Index: internal/vbase.hh
===================================================================
RCS file: /cvsroot/toon/TooN/internal/vbase.hh,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- internal/vbase.hh 26 Aug 2009 09:36:37 -0000 1.35
+++ internal/vbase.hh 26 Aug 2009 09:51:09 -0000 1.36
@@ -160,6 +160,11 @@
Vector<(Size==Dynamic?Dynamic:Size-Start+(X)), Precision,
SliceVBase<Stride> > slice(){\
static const int Len = (Size==Dynamic?Dynamic:Size-Start+(X));\
return slice<Start, Len>(Start, size() - Start + (X));\
+ }\
+ template<int Start, StaticEndMarker<(X)>(*End)()> \
+ const Vector<(Size==Dynamic?Dynamic:Size-Start+(X)), Precision,
SliceVBase<Stride> > slice() const {\
+ static const int Len = (Size==Dynamic?Dynamic:Size-Start+(X));\
+ return slice<Start, Len>(Start, size() - Start + (X));\
}
#define TOON_INTERNAL_MAKE_END_99(D0)\
@@ -194,12 +199,22 @@
return slice(i, size()-i+e.e);
}
+ const Vector<Dynamic, Precision, SliceVBase<Stride> > slice(int i,
Internal::DynamicEndMarker e) const
+ {
+ return slice(i, size()-i+e.e);
+ }
+
//Alternate form of dynamic slicing with End:
Vector<Dynamic, Precision, SliceVBase<Stride> > slice(int i,
Internal::DynamicEndMarker(*)())
{
return slice(i, size()-i);
}
+ const Vector<Dynamic, Precision, SliceVBase<Stride> > slice(int i,
Internal::DynamicEndMarker(*)()) const
+ {
+ return slice(i, size()-i);
+ }
+
//Other slices below
const Matrix<1, Size, Precision, Slice<1,Stride> > as_row() const{
return Matrix<1, Size, Precision, Slice<1,Stride>
>(const_cast<Precision*>(my_data), 1, size(), 1, stride(), Slicing());
Index: test/slice_test.cc
===================================================================
RCS file: /cvsroot/toon/TooN/test/slice_test.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- test/slice_test.cc 26 Aug 2009 09:36:37 -0000 1.5
+++ test/slice_test.cc 26 Aug 2009 09:51:09 -0000 1.6
@@ -23,6 +23,11 @@
cout << u.slice(2, 3) << endl << endl;
cout << project(v) << endl;
+ cout << project(u) << endl;
+ cout << project(v.slice<1,End<0> >()) << endl;
+ cout << project(u.slice<1,End<0> >()) << endl;
+ cout << unproject(v) << endl;
+ cout << unproject(u) << endl;
cout << v.slice<1, End<0> >() << endl;
cout << u.slice<1, End<0> >() << endl;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Toon-members] TooN helpers.h internal/vbase.hh test/slice_tes...,
Edward Rosten <=