[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Toon-members] TooN TooN.h doc/documentation.h internal/vbase....
From: |
Edward Rosten |
Subject: |
[Toon-members] TooN TooN.h doc/documentation.h internal/vbase.... |
Date: |
Wed, 26 Aug 2009 09:34:44 +0000 |
CVSROOT: /cvsroot/toon
Module name: TooN
Changes by: Edward Rosten <edrosten> 09/08/26 09:34:44
Modified files:
. : TooN.h
doc : documentation.h
internal : vbase.hh
test : slice_test.cc
Log message:
Document and clean up slicing relative to the end.
- Fixed for dynamic vectors
- Allow: v.slice(2, End)
- Add static slices up to -99
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/TooN.h?cvsroot=toon&r1=1.52&r2=1.53
http://cvs.savannah.gnu.org/viewcvs/TooN/doc/documentation.h?cvsroot=toon&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/vbase.hh?cvsroot=toon&r1=1.33&r2=1.34
http://cvs.savannah.gnu.org/viewcvs/TooN/test/slice_test.cc?cvsroot=toon&r1=1.3&r2=1.4
Patches:
Index: TooN.h
===================================================================
RCS file: /cvsroot/toon/TooN/TooN.h,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -b -r1.52 -r1.53
--- TooN.h 25 Aug 2009 16:58:27 -0000 1.52
+++ TooN.h 26 Aug 2009 09:34:44 -0000 1.53
@@ -234,28 +234,62 @@
namespace Internal
{
- template<int I> struct KnownEndMarker
+ ///@internal
+ ///@brief Used to mark slice to some offset before the end of a
vector.
+ ///The offset is known at compile time.
+ ///@ingroup gInternal
+ template<int I> struct StaticEndMarker
{
static const int End=I;
};
- struct EndMarker
+ ///@internal
+ ///@brief Used to mark slice to some offset before the end of a
vector.
+ ///The offset is known at run time.
+ ///@ingroup gInternal
+ struct DynamicEndMarker
{
+ DynamicEndMarker(int e_)
+ :e(e_){}
int e;
};
};
- template<int I> Internal::KnownEndMarker<I> End();
-
- inline Internal::EndMarker End()
+ ///Used for slicing relative to the end, rather than with a known size.
+ ///For example:
+ ///@code
+ /// Vector<3> v = makeVector(6,5,4,3,2);
+ /// v.slice<1, End<0> >(); //5 4 3 2
+ /// v.slice<0, End<-1> >(); //6 5 4 3
+ ///@endcode
+ ///See also ``\ref sElemOps''.
+ ///@ingroup gLinAlg
+ template<int I> Internal::StaticEndMarker<I> End();
+
+ ///Used for slicing relative to the end, rather than with a known size.
+ ///For example:
+ ///@code
+ /// Vector<> v = makeVector(6,5,4,3,2);
+ /// v.slice(1, End); //5 4 3 2
+ ///@endcode
+ ///See also ``\ref sElemOps''.
+ ///@ingroup gLinAlg
+ inline Internal::DynamicEndMarker End()
{
- Internal::EndMarker end = {0};
- return end;
+ return 0;
}
- inline Internal::EndMarker End(int e)
+
+ ///Used for slicing relative to the end, rather than with a known size.
+ ///For example:
+ ///@code
+ /// Vector<> v = makeVector(6,5,4,3,2);
+ /// v.slice(1, End(-1)); //5 4 3
+ ///@endcode
+ ///See also ``\ref sElemOps''.
+ ///@ingroup gLinAlg
+ inline Internal::DynamicEndMarker End(int e)
{
- Internal::EndMarker end = {e};
- return end;
+ return e;
}
///All TooN classes default to using this precision for computations
and storage.
Index: doc/documentation.h
===================================================================
RCS file: /cvsroot/toon/TooN/doc/documentation.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- doc/documentation.h 24 Aug 2009 13:00:14 -0000 1.34
+++ doc/documentation.h 26 Aug 2009 09:34:44 -0000 1.35
@@ -213,7 +213,8 @@
Vector.as_col() //vector as a Nx1 matrix
@endcode
- Slicing:
+ Slicing with a start position and size:
+
@code
Vector.slice<Start, End>(); //Static
slice
Vector.slice(start, end);
//Dynamic slice
@@ -222,6 +223,29 @@
Matrix.diagonal_slice(); //Get
the leading diagonal as a vector.
@endcode
+ Like other features of TooN, mixed static/dynamic slicing is
allowed.
+ For example:
+
+ @code
+ Vector.slice<Dynamic, 2>(3, 2); //Slice starting at index 3,
of length 2.
+ @endcode
+
+ Slicing can also be perferformed relative to the end of a
vector.
+ WARNING:
+ - NOT YET IMPLEMENTED FOR MATRIX
+ - EXPERIMANTAL: MAY BE SUBJECT TO CHANGE
+ - STATIC SLICES ONLY GO UP TO <code>End<-99></code>
+
+ @code
+ Vector<6> v;
+ v.slice<1, End<0> >(); //Equivalent to v.slice<1, 5>
+ v.slice<2, End<-1> >(); //Equivalent to v.slice<2, 3>
+
+ v.slice(1, End); //Equivalent to v.slice(1, 5);
+ v.slice(3, End(-2)); //Equivalent to v.slice(3, 2);
+ @endcode
+
+
See also \ref sSlices
\subsection sInitialize How I initialize a vector/matrix?
Index: internal/vbase.hh
===================================================================
RCS file: /cvsroot/toon/TooN/internal/vbase.hh,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -b -r1.33 -r1.34
--- internal/vbase.hh 25 Aug 2009 17:00:34 -0000 1.33
+++ internal/vbase.hh 26 Aug 2009 09:34:44 -0000 1.34
@@ -154,37 +154,65 @@
return slice<Dynamic, Dynamic>(start, length);
}
- //Vector slice with End
- //eg:
- //.slice<1, End<> >()
- template<int Start, int End>
- Vector<(Size==Dynamic?Dynamic:Size-Start+End), Precision,
SliceVBase<Stride> > sliceend(){
- static const int Len = (Size==Dynamic?Dynamic:Size-Start+End);
- return slice<Start, Len>();
- }
-
+ //Static slicing with End
#define TOON_INTERNAL_MAKE_END(X)\
- template<int Start, KnownEndMarker<X>(*End)()> \
- Vector<(Size==Dynamic?Dynamic:Size-Start+X), Precision,
SliceVBase<Stride> > slice(){\
- return sliceend<Start, X>();\
- }
-
- TOON_INTERNAL_MAKE_END(0);
- TOON_INTERNAL_MAKE_END(-1);
- TOON_INTERNAL_MAKE_END(-2);
- TOON_INTERNAL_MAKE_END(-3);
- TOON_INTERNAL_MAKE_END(-4);
- TOON_INTERNAL_MAKE_END(-5);
- TOON_INTERNAL_MAKE_END(-6);
- TOON_INTERNAL_MAKE_END(-7);
- TOON_INTERNAL_MAKE_END(-8);
- TOON_INTERNAL_MAKE_END(-9);
+ template<int Start, StaticEndMarker<(X)>(*End)()> \
+ 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));\
+ }
+
+ #define TOON_INTERNAL_MAKE_END_99(D0)\
+ TOON_INTERNAL_MAKE_END(D0##0);\
+ TOON_INTERNAL_MAKE_END(D0##1);\
+ TOON_INTERNAL_MAKE_END(D0##2);\
+ TOON_INTERNAL_MAKE_END(D0##3);\
+ TOON_INTERNAL_MAKE_END(D0##4);\
+ TOON_INTERNAL_MAKE_END(D0##5);\
+ TOON_INTERNAL_MAKE_END(D0##6);\
+ TOON_INTERNAL_MAKE_END(D0##7);\
+ TOON_INTERNAL_MAKE_END(D0##8);\
+ TOON_INTERNAL_MAKE_END(D0##9);\
+ TOON_INTERNAL_MAKE_END(D0##A);\
+ TOON_INTERNAL_MAKE_END(D0##B);\
+ TOON_INTERNAL_MAKE_END(D0##C);\
+ TOON_INTERNAL_MAKE_END(D0##D);\
+ TOON_INTERNAL_MAKE_END(D0##E);\
+ TOON_INTERNAL_MAKE_END(D0##F);\
+
+ TOON_INTERNAL_MAKE_END_99(-0x0);
+ TOON_INTERNAL_MAKE_END_99(-0x1);
+ TOON_INTERNAL_MAKE_END_99(-0x2);
+ TOON_INTERNAL_MAKE_END_99(-0x3);
+ TOON_INTERNAL_MAKE_END_99(-0x4);
+ TOON_INTERNAL_MAKE_END_99(-0x5);
+ TOON_INTERNAL_MAKE_END_99(-0x6);
+ TOON_INTERNAL_MAKE_END_99(-0x7);
+ TOON_INTERNAL_MAKE_END_99(-0x8);
+ TOON_INTERNAL_MAKE_END_99(-0x9);
+ TOON_INTERNAL_MAKE_END_99(-0x9);
+ TOON_INTERNAL_MAKE_END_99(-0xA);
+ TOON_INTERNAL_MAKE_END_99(-0xB);
+ TOON_INTERNAL_MAKE_END_99(-0xC);
+ TOON_INTERNAL_MAKE_END_99(-0xD);
+ TOON_INTERNAL_MAKE_END_99(-0xE);
+ TOON_INTERNAL_MAKE_END_99(-0xF);
+
+ #undef TOON_INTERNAL_MAKE_END
+ #undef TOON_INTERNAL_MAKE_END99
- Vector<Dynamic, Precision, SliceVBase<Stride> > slice(int i,
Internal::EndMarker e)
+ //Dynamic slicing with End
+ Vector<Dynamic, Precision, SliceVBase<Stride> > slice(int i,
Internal::DynamicEndMarker e)
{
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);
+ }
+
//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.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- test/slice_test.cc 25 Aug 2009 16:58:27 -0000 1.3
+++ test/slice_test.cc 26 Aug 2009 09:34:44 -0000 1.4
@@ -25,7 +25,15 @@
cout << project(v) << endl;
cout << v.slice<1, End<0> >() << endl;
+ cout << u.slice<1, End<0> >() << endl;
cout << v.slice<1, End<-1> >() << endl;
- cout << v.slice(2, End()) << endl;
- cout << v.slice(2, End(-1)) << endl;
+ cout << u.slice<1, End<-1> >() << endl;
+ cout << v.slice(2, End) << endl;
+ cout << u.slice(2, End) << endl;
+ cout << v.slice(2, End(-1)) << endl << endl;
+ cout << u.slice(2, End(-1)) << endl << endl;
+
+ Vector<356> w = Zeros;
+
+ cout << w.slice<100,End<-255> >() << endl;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Toon-members] TooN TooN.h doc/documentation.h internal/vbase....,
Edward Rosten <=