toon-members
[Top][All Lists]
Advanced

[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;
 }




reply via email to

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