libcvd-members
[Top][All Lists]
Advanced

[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)




reply via email to

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