[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libcvd-members] gvars3/gvars3 serialize.h
From: |
Edward Rosten |
Subject: |
[libcvd-members] gvars3/gvars3 serialize.h |
Date: |
Tue, 23 Jun 2009 09:48:37 +0000 |
CVSROOT: /cvsroot/libcvd
Module name: gvars3
Changes by: Edward Rosten <edrosten> 09/06/23 09:48:37
Modified files:
gvars3 : serialize.h
Log message:
Matrix parsing.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gvars3/gvars3/serialize.h?cvsroot=libcvd&r1=1.15&r2=1.16
Patches:
Index: serialize.h
===================================================================
RCS file: /cvsroot/libcvd/gvars3/gvars3/serialize.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- serialize.h 4 Jun 2009 17:16:04 -0000 1.15
+++ serialize.h 23 Jun 2009 09:48:37 -0000 1.16
@@ -74,6 +74,7 @@
in >> ws;
int c;
+
if((c = in.get()) == EOF)
return v;
@@ -222,34 +223,43 @@
}
};
- /*template<int N> std::istream&
from_stream(std::istream& i, TooN::Matrix<N>& m)
+ template<int R, int C, class Precision> struct
FromStream<TooN::Matrix<R, C, Precision> >
+ {
+ static TooN::Matrix<R, C, Precision>
from(std::istream& i)
{
- std::vector<std::vector<double> > v;
- from_stream(i, v);
+ using std::vector;
+ vector<vector<double> > v =
FromStream<vector<vector<double> > >::from(i);
+
+ if(i.fail() || i.bad())
+ goto fail;
+
+ for(int r=1; r < v.size(); r++)
+ if(v[r].size() != v[0].size())
+ goto fail;
+
+ if(R != -1 && v.size() != R)
+ goto fail;
+
+ if(C != -1 && v[0].size() != C)
+ goto fail;
- if(v.size() != m.num_rows())
{
- i.setstate(std::ios::failbit);
- return i;
+ TooN::Matrix<R, C, Precision>
retval(v.size(), v[0].size());
+
+ for(int r=0; r <
retval.num_rows(); r++)
+ for(int c=0; c <
retval.num_cols(); c++)
+ retval[r][c] =
v[r][c];
+
+ return retval;
}
- for(int r=1; r < m.size(); r++)
- {
- if(v[r].size() != m.num_cols())
- {
+ fail:
i.setstate(std::ios::failbit);
- return i;
- }
+ i.setstate(std::ios::badbit);
+ return
DefaultValue<TooN::Matrix<R, C, Precision> >::val();
}
+ };
-
- for(int r=0; r < m.num_rows(); r++)
- for(int c=0; c < m.num_cols(); c++)
- {
- m[r][c] = v[r][c];
- }
- return i;
- }*/
#endif
template<class T> T from_stream(std::istream& i)