libcvd-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libcvd-members] gvars3 gvars3/gv3_implementation.hh gvars3/gvar...


From: Edward Rosten
Subject: [libcvd-members] gvars3 gvars3/gv3_implementation.hh gvars3/gvar...
Date: Fri, 27 May 2011 16:24:43 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    gvars3
Changes by:     Edward Rosten <edrosten>        11/05/27 16:24:43

Modified files:
        gvars3         : gv3_implementation.hh gvars3.h serialize.h 
        src            : gvars3.cc serialize.cc 

Log message:
        print_var_list now serializes with  std::setprecision(20) << 
std::scientific
        so that floats and doubles are recorded without any loss of precision.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gvars3/gvars3/gv3_implementation.hh?cvsroot=libcvd&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/gvars3/gvars3/gvars3.h?cvsroot=libcvd&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/gvars3/gvars3/serialize.h?cvsroot=libcvd&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/gvars3.cc?cvsroot=libcvd&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/serialize.cc?cvsroot=libcvd&r1=1.17&r2=1.18

Patches:
Index: gvars3/gv3_implementation.hh
===================================================================
RCS file: /cvsroot/libcvd/gvars3/gvars3/gv3_implementation.hh,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- gvars3/gv3_implementation.hh        23 Jun 2009 09:54:28 -0000      1.18
+++ gvars3/gv3_implementation.hh        27 May 2011 16:24:41 -0000      1.19
@@ -25,7 +25,7 @@
                };
 
                if(!(flags & SILENT))
-                       std::cerr << "? GV3::Register: " << type_name<T>() << " 
" << name << " undefined. Defaults to " << serialize::to_string(default_val) << 
std::endl;
+                       std::cerr << "? GV3::Register: " << type_name<T>() << " 
" << name << " undefined. Defaults to " << serialize::to_string(default_val,0) 
<< std::endl;
 
                d = safe_replace(name, default_val);
        }

Index: gvars3/gvars3.h
===================================================================
RCS file: /cvsroot/libcvd/gvars3/gvars3/gvars3.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- gvars3/gvars3.h     4 Nov 2009 07:40:51 -0000       1.26
+++ gvars3/gvars3.h     27 May 2011 16:24:43 -0000      1.27
@@ -47,7 +47,7 @@
 class BaseMap
 {
        public:
-               virtual std::string get_as_string(const std::string& name)=0;
+               virtual std::string get_as_string(const std::string& name, bool 
precise)=0;
                virtual int set_from_string(const std::string& name, const 
std::string& val)=0;
                virtual std::string name()=0;
                virtual std::vector<std::string> list_tags()=0;
@@ -189,14 +189,14 @@
                                        return e;
                                }
 
-                               virtual std::string get_as_string(const 
std::string& name)
+                               virtual std::string get_as_string(const 
std::string& name, bool precise)
                                {       
                                        DataIter i = data.find(name);
 
                                        if(i == data.end())
                                                i = data.insert(make_pair(name, 
DefaultValue<T>::val())).first;
 
-                                       return 
serialize::to_string(i->second.get());
+                                       return 
serialize::to_string(i->second.get(), precise);
                                }
 
                                virtual std::string name()

Index: gvars3/serialize.h
===================================================================
RCS file: /cvsroot/libcvd/gvars3/gvars3/serialize.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- gvars3/serialize.h  14 Apr 2011 20:18:12 -0000      1.18
+++ gvars3/serialize.h  27 May 2011 16:24:43 -0000      1.19
@@ -27,6 +27,7 @@
 #include <vector>
 #include <sstream>
 #include <cstdio>
+#include <iomanip>
 
 namespace GVars3
 {
@@ -36,17 +37,27 @@
                /// @param input stream to check.
                int check_stream(std::istream& i);
                        
+               
+               /// Function which sets a stream into "precise" mode. This will 
losslessly
+               /// save any numbers up to and including double precision.
+               inline void generic_setup(std::ostream& o, bool b)
+               {
+                       if(b)
+                               o << std::setprecision(20) << std::scientific;
+               }
+                       
                //Define a serializer for everything that works with iostreams
                //override to add new types with unusual serializers
-               template<class T> std::string to_string(const T& val)
+               template<class T> std::string to_string(const T& val, bool 
precise)
                {
                         
                        std::ostringstream o;
+                       generic_setup(o,precise);
                        o << val;
                        return o.str();
                }
 
-               std::string to_string(const std::string& val);
+               std::string to_string(const std::string& val, bool);
 
                template<class T> struct FromStream
                {
@@ -111,9 +122,10 @@
                        }
                };
 
-               template<typename T> std::string to_string( const 
std::vector<T> & v)
+               template<typename T> std::string to_string( const 
std::vector<T> & v, bool precise)
                {
                        std::ostringstream o;
+                       generic_setup(o, precise);
                        o << "[ ";
                        for(unsigned i = 0; i < v.size(); ++i)
                                o << to_string(v[i]) << " ";
@@ -174,9 +186,10 @@
 
 
                #ifdef GVARS3_HAVE_TOON
-                       template<int N> std::string to_string(const 
TooN::Vector<N>& m)
+                       template<int N> std::string to_string(const 
TooN::Vector<N>& m, bool precise)
                        {
                                std::ostringstream o;
+                               generic_setup(o, precise);
                                o << "[ ";
                                for(int i=0; i<m.size(); i++)
                                  o << m[i] << " ";
@@ -184,9 +197,10 @@
                                return o.str();
                        }
 
-                       template<int N, int M> std::string to_string(const 
TooN::Matrix<N, M>& m)
+                       template<int N, int M> std::string to_string(const 
TooN::Matrix<N, M>& m, bool precise)
                        {
                                std::ostringstream o;
+                               generic_setup(o, precise);
                                o << "[ ";
                                for(int i=0; i<m.num_rows(); i++)
                                {

Index: src/gvars3.cc
===================================================================
RCS file: /cvsroot/libcvd/gvars3/src/gvars3.cc,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- src/gvars3.cc       20 Apr 2009 12:59:20 -0000      1.12
+++ src/gvars3.cc       27 May 2011 16:24:43 -0000      1.13
@@ -52,7 +52,7 @@
        string GV3::get_var(string name)
        {
                if(registered_type_and_trait.count(name))
-                       return 
registered_type_and_trait[name].first->get_as_string(name);
+                       return 
registered_type_and_trait[name].first->get_as_string(name, 0);
                else if(unmatched_tags.count(name))
                        return unmatched_tags[name];
                else
@@ -85,7 +85,7 @@
                for(map<string, std::pair<BaseMap*,int> >::iterator 
i=registered_type_and_trait.begin(); i != registered_type_and_trait.end(); i++)
                  if(show_all || !(i->second.second & HIDDEN))
                    if(no_pattern || !fnmatch(pattern.c_str(), 
i->first.c_str(), FNM_CASEFOLD))
-                     o << i->first << "=" << get_var(i->first) << endl;
+                     o << i->first << "=" << 
i->second.first->get_as_string(i->first, 1) << endl;
 
                if(show_all)
                  {

Index: src/serialize.cc
===================================================================
RCS file: /cvsroot/libcvd/gvars3/src/serialize.cc,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- src/serialize.cc    5 May 2009 10:59:46 -0000       1.17
+++ src/serialize.cc    27 May 2011 16:24:43 -0000      1.18
@@ -29,7 +29,7 @@
 {
 namespace serialize
 {
-       std::string to_string(const std::string& s)
+       std::string to_string(const std::string& s, bool)
        {
                ostringstream os;
                os << "\"";



reply via email to

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