[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Toon-members] TooN/internal vector.hh
From: |
Edward Rosten |
Subject: |
[Toon-members] TooN/internal vector.hh |
Date: |
Fri, 09 Jan 2009 15:11:50 +0000 |
CVSROOT: /cvsroot/toon
Module name: TooN
Changes by: Edward Rosten <edrosten> 09/01/09 15:11:50
Modified files:
internal : vector.hh
Log message:
Added some missing Precision bits.
Added some more slice bits.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/internal/vector.hh?cvsroot=toon&r1=1.2&r2=1.3
Patches:
Index: vector.hh
===================================================================
RCS file: /cvsroot/toon/TooN/internal/vector.hh,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- vector.hh 9 Jan 2009 14:45:02 -0000 1.2
+++ vector.hh 9 Jan 2009 15:11:50 -0000 1.3
@@ -20,9 +20,8 @@
template <int Size, int Type, typename Precision>
class VBase;
-template <typename Precision>
-class SDVBase;
-
+template<int Stride, typename Precision>
+class SDVBase; //Sliced Dynamic VBase. No ownership of data, Static stride.
template<int Size, typename Precision>
class VBase<Size, 0, Precision> {
@@ -40,7 +39,7 @@
// constructor from arbitrary vector
template<int Size2, class Base2>
- inline VBase(const Vector<Size2,Base2>& from){}
+ inline VBase(const Vector<Size2, Precision, Base2>& from){}
Precision* data(){return my_data;}
const Precision* data() const {return my_data;}
@@ -58,13 +57,13 @@
}
template <int Start, int Length>
- Vector<Length, Precision, SVBase<Length,1> >
+ Vector<Length, Precision, SVBase<Length,1,Precision> >
slice(){
Internal::CheckSlice<Size, Start, Length>::check();
return Vector<Length, Precision, SVBase<Length,1,Precision>
>(&(my_data[Start]));
}
- Vector<-1, Precision, SDVBase>
+ Vector<-1, Precision, SDVBase<1, Precision> >
slice(int start, int length);
private:
@@ -72,7 +71,7 @@
};
template<int Size, typename Precision>
-class VBase<Size,1>{
+class VBase<Size,1, Precision>{
public:
// Constructors
@@ -111,7 +110,7 @@
}
Precision* data(){return my_data;}
- const Precsion* data() const {return my_data;}
+ const Precision* data() const {return my_data;}
static int size(){return Size;}
static int stride(){return 1;}
@@ -124,11 +123,14 @@
}
template <int Start, int Length>
- Vector<Length, Precision, SVBase<Length,1> >
+ Vector<Length, Precision, SVBase<Length,1, Precision> >
slice(){
return Vector<Length, Precision, SVBase<Length,1,Precision>
>(&(my_data[Start]));
}
+ Vector<-1, Precision, SDVBase<1, Precision> >
+ slice(int start, int length);
+
private:
Precision* const my_data;
};
@@ -161,7 +163,7 @@
}
template <int Start, int Length>
- Vector<Length, Precision, SVBase<Length,Stride> >
+ Vector<Length, Precision, SVBase<Length,Stride,Precision> >
slice(){
return Vector<Length, Precision, SVBase<Length,1,Precision>
>(&(my_data[Start*Stride]));
}
@@ -204,7 +206,7 @@
// constructor from arbitrary vector
template<int Size2, class Base2>
- inline DVBase(const Vector<Size2,Base2>& from):
+ inline DVBase(const Vector<Size2, Precision, Base2>& from):
my_data(new Precision[from.size()]),
my_size(from.size()) {
}
@@ -245,7 +247,7 @@
SDVBase(const SDVBase& from)
: my_data(from.my_data),
- my_size(from.my_size),
+ my_size(from.my_size){
}
Precision* data(){return my_data;}
@@ -276,7 +278,7 @@
my_stride=stride_in;
};
- SSDVBase(const SDVBase& from)
+ SSDVBase(const SSDVBase& from)
: my_data(from.my_data),
my_size(from.my_size),
my_stride(from.my_stride){
@@ -291,6 +293,7 @@
Precision& operator[](int i){
return my_data[i*my_stride];
}
+
const Precision& operator[](int i) const {
return my_data[i*my_stride];
}
@@ -364,7 +367,7 @@
}
// operator = from copy
- inline Vector<Size,Base >& operator= (const Vector& from){
+ inline Vector& operator= (const Vector& from){
SizeMismatch<Size,Size>::test(Base::size(), from.size());
const int s=Base::size();
for(int i=0; i<s; i++){
@@ -386,4 +389,18 @@
};
-#endif
+////////////////////////////////////////////////////////////////////////////////
+//
+// Fill in function calls, now everything is visible
+
+template<int Size, typename Precision>
+Vector<-1, Precision, SDVBase<1, Precision> > VBase<Size, 0, Precision>::
slice(int start, int length){
+ Internal::CheckSlice<>::check(Size, start, length);
+ return Vector<-1, Precision, SDVBase<1, Precision> >(my_data + start,
length);
+}
+
+template<int Size, typename Precision>
+Vector<-1, Precision, SDVBase<1, Precision> > VBase<Size, 1, Precision>::
slice(int start, int length){
+ Internal::CheckSlice<>::check(Size, start, length);
+ return Vector<-1, Precision, SDVBase<1, Precision> >(my_data + start,
length);
+}
- [Toon-members] TooN/internal vector.hh,
Edward Rosten <=