[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libcvd-members] gvars3 main.cc gvars3/gv3_implementation.hh gva...
From: |
Georg Klein |
Subject: |
[libcvd-members] gvars3 main.cc gvars3/gv3_implementation.hh gva... |
Date: |
Sun, 11 Feb 2007 00:09:15 +0000 |
CVSROOT: /sources/libcvd
Module name: gvars3
Changes by: Georg Klein <georgklein> 07/02/11 00:09:14
Modified files:
. : main.cc
gvars3 : gv3_implementation.hh gvars3.h
src : GUI.cc gvars2.cc gvars3.cc
Log message:
Improvements to the "gvarlist" internal command:
gvarlist [-a] [pattern]
If pattern is given, output is matched to include only vars matching
pattern, which may include wildcards.
If -a is supplied, all registered and unregistered vars (subject to
the above) are printed; otherwise, unregistered and `hidden' gvars are
omitted. A gvar is made hidden during register or get; the interface to
this is now no longer
Register(gvar, name, default_val, bool silent_default)
but
Register(gvar, name, default_val, int flags).
Two bit-flags are defined: GVars3::HIDDEN and GVars3::SILENT.
Since SILENT takes value 1, existing code with "true" should
still work.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gvars3/main.cc?cvsroot=libcvd&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/gvars3/gvars3/gv3_implementation.hh?cvsroot=libcvd&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/gvars3/gvars3/gvars3.h?cvsroot=libcvd&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/GUI.cc?cvsroot=libcvd&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/gvars2.cc?cvsroot=libcvd&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/gvars3.cc?cvsroot=libcvd&r1=1.9&r2=1.10
Patches:
Index: main.cc
===================================================================
RCS file: /sources/libcvd/gvars3/main.cc,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- main.cc 16 May 2006 11:10:11 -0000 1.13
+++ main.cc 11 Feb 2007 00:09:14 -0000 1.14
@@ -31,7 +31,6 @@
#include <gvars3/GUI.h>
#include <gvars3/instances.h>
using namespace GVars3;
-
#endif
#include <gvars3/GUI_readline.h>
@@ -78,6 +77,8 @@
GV2.Register(v,"TestVecM1", "[ 10 10 10]" );
GVars3::gvar3<Vector<3> > v3;
GV2.Register(v3,"TestVec3", "[ 10 10 10]" );
+ GV3::get<string>("SilentString", "pssst!" , SILENT);
+ GV3::get("hidden__________hidden", 1, SILENT | HIDDEN);
gvar2_double a_double;
gvar2_int an_int;
Index: gvars3/gv3_implementation.hh
===================================================================
RCS file: /sources/libcvd/gvars3/gvars3/gv3_implementation.hh,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- gvars3/gv3_implementation.hh 24 May 2006 14:04:43 -0000 1.8
+++ gvars3/gv3_implementation.hh 11 Feb 2007 00:09:14 -0000 1.9
@@ -16,7 +16,7 @@
// TODO: Make the specialisation for matrices as well.
-template<class T> T* GV3::register_new_gvar(const std::string& name, const T&
default_val, bool silent)
+template<class T> T* GV3::register_new_gvar(const std::string& name, const T&
default_val, int flags)
{
T* d ;
std::map<std::string, std::string>::iterator i;
@@ -24,12 +24,12 @@
i = unmatched_tags.find(name);
d = TypedMap<T>::instance().create(name);
- typeof_tags[name] = &TypedMap<T>::instance();
+ registered_type_and_trait[name] = std::pair<BaseMap*,
int>(&TypedMap<T>::instance(), flags);
//Look to see if ``name'' has not already been set
if(i == unmatched_tags.end())
{
- if(!silent)
+ if(!(flags & SILENT))
std::cerr << "? GV3::Register: " << type_name<T>() << " " << name << "
undefined. Defaults to "
<< serialize::to_string(default_val) << std::endl;
@@ -47,15 +47,15 @@
}
-template<class T> T* GV3::get_by_val(const std::string& name, const T&
default_val, bool silent)
+template<class T> T* GV3::get_by_val(const std::string& name, const T&
default_val, int flags)
{
T* d = attempt_get<T>(name);
if(!d)
- d = register_new_gvar(name, default_val, silent);
+ d = register_new_gvar(name, default_val, flags);
return d;
}
-template<class T> T* GV3::get_by_str(const std::string& name, const
std::string& default_val, bool silent)
+template<class T> T* GV3::get_by_str(const std::string& name, const
std::string& default_val, int flags)
{
T* d = attempt_get<T>(name);
if(d!=NULL) return d;
@@ -64,39 +64,39 @@
int e = serialize::from_string(default_val, def);
parse_warning(e, type_name<T>(), name, default_val);
- return register_new_gvar(name, def, silent);
+ return register_new_gvar(name, def, flags);
}
-template<>inline std::string& GV3::get<std::string>(const std::string& name,
std::string default_val, bool silent)
+template<>inline std::string& GV3::get<std::string>(const std::string& name,
std::string default_val, int flags)
{
- return *get_by_val(name, default_val, silent);
+ return *get_by_val(name, default_val, flags);
}
-template<class T> T& GV3::get(const std::string& name, std::string
default_val, bool silent)
+template<class T> T& GV3::get(const std::string& name, std::string
default_val, int flags)
{
- return *get_by_str<T>(name, default_val, silent);
+ return *get_by_str<T>(name, default_val, flags);
}
-template<class T> T& GV3::get(const std::string& name, const T& default_val,
bool silent)
+template<class T> T& GV3::get(const std::string& name, const T& default_val,
int flags)
{
- return *get_by_val(name, default_val, silent);
+ return *get_by_val(name, default_val, flags);
}
-template<class T> void GV3::Register(gvar2<T>& gv, const std::string& name,
const T& default_val, bool silent)
+template<class T> void GV3::Register(gvar2<T>& gv, const std::string& name,
const T& default_val, int flags)
{
- gv.data = get_by_val(name, default_val, silent);
+ gv.data = get_by_val(name, default_val, flags);
}
-template<class T> void GV3::Register(gvar2<T>& gv, const std::string& name,
const std::string& default_val, bool silent)
+template<class T> void GV3::Register(gvar2<T>& gv, const std::string& name,
const std::string& default_val, int flags)
{
- gv.data = get_by_str<T>(name, default_val, silent);
+ gv.data = get_by_str<T>(name, default_val, flags);
}
-inline void GV3::Register(gvar2<std::string>& gv, const std::string& name,
const std::string& default_val, bool silent)
+inline void GV3::Register(gvar2<std::string>& gv, const std::string& name,
const std::string& default_val, int flags)
{
- gv.data = get_by_val(name, default_val, silent);
+ gv.data = get_by_val(name, default_val, flags);
}
Index: gvars3/gvars3.h
===================================================================
RCS file: /sources/libcvd/gvars3/gvars3/gvars3.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- gvars3/gvars3.h 18 Jan 2007 16:46:26 -0000 1.16
+++ gvars3/gvars3.h 11 Feb 2007 00:09:14 -0000 1.17
@@ -81,6 +81,12 @@
T* data;
};
+// Bit-masks for gvar registration:
+// SILENT makes gvars not complain if it has to use the default;
+// HIDDEN makes vars not appear in gvarlist unless used with -a
+
+enum { SILENT = 1<<0, HIDDEN = 1<<1};
+
typedef gvar2<double> gvar2_double;
typedef gvar2<int> gvar2_int;
@@ -92,8 +98,8 @@
{
friend class GV3;
public:
- inline gvar3(const std::string& name, const T& default_val = T(), bool
silent=false);
- inline gvar3(const std::string& name, const std::string& default_val,
bool silent);
+ inline gvar3(const std::string& name, const T& default_val = T(), int
flags=0);
+ inline gvar3(const std::string& name, const std::string& default_val,
int flags);
inline gvar3(){};
};
@@ -101,7 +107,7 @@
{
friend class GV3;
public:
- inline gvar3(const std::string& name, const std::string& default_val =
"", bool silent=false);
+ inline gvar3(const std::string& name, const std::string& default_val =
"", int flags=0);
inline gvar3(){};
};
@@ -185,10 +191,10 @@
if(!d) //Data not present in map of the correct type
{
//Does it exist with a different type?
- if(typeof_tags.count(name))
+ if(registered_type_and_trait.count(name))
{ //Yes: programmer error.
std::cerr << "GV3:Error: type mismatch
while getting " << type_name<T>() << " " << name << ": already registered "
- "as type " <<
typeof_tags[name]->name() << ". Fix your code.\n";
+ "as type " <<
registered_type_and_trait[name].first->name() << ". Fix your code.\n";
throw type_mismatch();
}
@@ -202,47 +208,47 @@
static void add_typemap(BaseMap* m);
static std::map<std::string, std::string>
unmatched_tags;
- static std::map<std::string, BaseMap*>
typeof_tags;
+ static std::map<std::string, std::pair<BaseMap*, int> >
registered_type_and_trait;
static std::list<BaseMap*>
maps;
- template<class T> static T* get_by_val(const std::string& name,
const T& default_val, bool silent);
- template<class T> static T* get_by_str(const std::string& name,
const std::string& default_val, bool silent);
- template<class T> static T* register_new_gvar(const std::string
&name, const T& default_val, bool silent);
+ template<class T> static T* get_by_val(const std::string& name,
const T& default_val, int flags);
+ template<class T> static T* get_by_str(const std::string& name,
const std::string& default_val, int flags);
+ template<class T> static T* register_new_gvar(const std::string
&name, const T& default_val, int flags);
public:
//Get references by name
- template<class T> static T& get(const std::string& name, const
T& default_val=T(), bool silent=false);
- template<class T> static T& get(const std::string& name,
std::string default_val, bool silent=false);
+ template<class T> static T& get(const std::string& name, const
T& default_val=T(), int flags=0);
+ template<class T> static T& get(const std::string& name,
std::string default_val, int flags=0);
//Register GVars
- template<class T> static void Register(gvar2<T>& gv, const
std::string& name, const T& default_val=T(), bool silent=false);
- template<class T> static void Register(gvar2<T>& gv, const
std::string& name, const std::string& default_val, bool silent=false);
- static inline void Register(gvar2<std::string>& gv, const
std::string& name, const std::string& default_val="", bool silent=false);
+ template<class T> static void Register(gvar2<T>& gv, const
std::string& name, const T& default_val=T(), int flags=0);
+ template<class T> static void Register(gvar2<T>& gv, const
std::string& name, const std::string& default_val, int flags=0);
+ static inline void Register(gvar2<std::string>& gv, const
std::string& name, const std::string& default_val="", int flags=0);
//Get and set by string only
static std::string get_var(std::string name);
static bool set_var(std::string name, std::string val, bool
silent=false);
//Some helper functions
- static void print_var_list(std::ostream& o);
+ static void print_var_list(std::ostream& o, std::string
pattern="", bool show_all=true);
static std::vector<std::string> tag_list();
};
-template<class T> gvar3<T>::gvar3(const std::string& name, const T&
default_val, bool silent)
+template<class T> gvar3<T>::gvar3(const std::string& name, const T&
default_val, int flags)
{
- GV3::Register(*this, name, default_val, silent);
+ GV3::Register(*this, name, default_val, flags);
}
-template<class T> gvar3<T>::gvar3(const std::string& name, const std::string&
default_val, bool silent)
+template<class T> gvar3<T>::gvar3(const std::string& name, const std::string&
default_val, int flags)
{
- GV3::Register(*this, name, default_val, silent);
+ GV3::Register(*this, name, default_val, flags);
}
-gvar3<std::string>::gvar3(const std::string& name, const std::string&
default_val, bool silent)
+gvar3<std::string>::gvar3(const std::string& name, const std::string&
default_val, int flags)
{
- GV3::Register(*this, name, default_val, silent);
+ GV3::Register(*this, name, default_val, flags);
}
@@ -252,51 +258,51 @@
class GVars2
{
public:
- template<class T> void Register(gvar2<T>& gv, const
std::string& name, const T& default_val=T(), bool silent=false)
+ template<class T> void Register(gvar2<T>& gv, const
std::string& name, const T& default_val=T(), int flags=false)
{
- GV3::Register(gv, name, default_val, silent);
+ GV3::Register(gv, name, default_val, flags);
}
- template<class T> void Register(gvar2<T>& gv, const
std::string& name, const std::string& default_val, bool silent=false)
+ template<class T> void Register(gvar2<T>& gv, const
std::string& name, const std::string& default_val, int flags=false)
{
- GV3::Register(gv, name, default_val, silent);
+ GV3::Register(gv, name, default_val, flags);
}
- inline void Register(gvar2<std::string>& gv, const std::string&
name, const std::string& default_val="", bool silent=false)
+ inline void Register(gvar2<std::string>& gv, const std::string&
name, const std::string& default_val="", int flags=false)
{
- GV3::Register(gv, name, default_val, silent);
+ GV3::Register(gv, name, default_val, flags);
}
- template<class T> T& Get(const std::string& name, const T&
default_val=T(), bool silent=false)
+ template<class T> T& Get(const std::string& name, const T&
default_val=T(), int flags=false)
{
- return GV3::get<T>(name, default_val, silent);
+ return GV3::get<T>(name, default_val, flags);
}
- template<class T> T& Get(const std::string& name, const
std::string& default_val="", bool silent=false)
+ template<class T> T& Get(const std::string& name, const
std::string& default_val="", int flags=false)
{
- return GV3::get<T>(name, default_val, silent);
+ return GV3::get<T>(name, default_val, flags);
}
- inline std::string& Get(const std::string& name, const
std::string& default_val="", bool silent=false)
+ inline std::string& Get(const std::string& name, const
std::string& default_val="", int flags=false)
{
- return GV3::get<std::string>(name, default_val, silent);
+ return GV3::get<std::string>(name, default_val, flags);
}
void SetVar(std::string sVar, std::string sValue, bool
silent=false);
void SetVar(std::string s);
- int& GetInt(const std::string& name, int default_val=0, bool
silent = false);
- double& GetDouble(const std::string& name, double
default_val=0.0, bool silent = false);
- std::string& GetString(const std::string& name, const
std::string& default_val="", bool silent = false);
- TooN::Vector<>& GetVector(const std::string& name, const
TooN::Vector<>& default_val=TooN::Vector<>(), bool silent = false);
- TooN::Matrix<>& GetMatrix(const std::string& name, const
TooN::Matrix<>& default_val=TooN::Matrix<>(), bool silent = false);
+ int& GetInt(const std::string& name, int default_val=0, int
flags=0);
+ double& GetDouble(const std::string& name, double
default_val=0.0, int flags=0);
+ std::string& GetString(const std::string& name, const
std::string& default_val="", int flags=0);
+ TooN::Vector<>& GetVector(const std::string& name, const
TooN::Vector<>& default_val=TooN::Vector<>(), int flags=0);
+ TooN::Matrix<>& GetMatrix(const std::string& name, const
TooN::Matrix<>& default_val=TooN::Matrix<>(), int flags=0);
- int& GetInt(const std::string& name, const std::string&
default_val, bool silent = false);
- double& GetDouble(const std::string& name, const std::string&
default_val, bool silent = false);
- TooN::Vector<>& GetVector(const std::string& name, const
std::string& default_val, bool silent = false);
- TooN::Matrix<>& GetMatrix(const std::string& name, const
std::string& default_val, bool silent = false);
+ int& GetInt(const std::string& name, const std::string&
default_val, int flags=0);
+ double& GetDouble(const std::string& name, const std::string&
default_val, int flags=0);
+ TooN::Vector<>& GetVector(const std::string& name, const
std::string& default_val, int flags=0);
+ TooN::Matrix<>& GetMatrix(const std::string& name, const
std::string& default_val, int flags=0);
std::string StringValue(const std::string &name, bool
no_quotes=false);
void PrintVarList(std::ostream& os=std::cout);
Index: src/GUI.cc
===================================================================
RCS file: /sources/libcvd/gvars3/src/GUI.cc,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- src/GUI.cc 21 Jun 2006 15:30:44 -0000 1.11
+++ src/GUI.cc 11 Feb 2007 00:09:14 -0000 1.12
@@ -554,7 +554,37 @@
void builtin_gvarlist(void* ptr, string sCommand, string sParams)
{
- GV3::print_var_list(cout);
+ bool error = false;
+ bool print_all = false;
+ string pattern = "";
+
+ vector<string> v = ChopAndUnquoteString(sParams);
+ if(v.size() > 0 && v[0][0] == '-')
+ if(v[0].size() == 2)
+ {
+ switch(v[0][1])
+ {
+ case 'a':
+ print_all = true;
+ break;
+ default:
+ error = true;
+ }
+ if(!error)
+ v.erase(v.begin());
+ }
+ else
+ error = true;
+
+ if(v.size()==1)
+ pattern = v[0];
+ else if(v.size() > 1)
+ error = true;
+
+ if(error)
+ cout << "? GUI internal " << sCommand << ": syntax is " << sCommand << "
[-a] [pattern] " << endl;
+ else
+ GV3::print_var_list(cout, pattern, print_all);
}
Index: src/gvars2.cc
===================================================================
RCS file: /sources/libcvd/gvars3/src/gvars2.cc,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- src/gvars2.cc 22 Nov 2005 18:33:34 -0000 1.4
+++ src/gvars2.cc 11 Feb 2007 00:09:14 -0000 1.5
@@ -51,50 +51,50 @@
SetVar(s.substr(0,n),s.substr(n+1,s.npos-n));
}
- int& GVars2::GetInt(const string& name, int default_val, bool silent)
+ int& GVars2::GetInt(const string& name, int default_val, int flags)
{
- return Get<int>(name, default_val, silent);
+ return Get<int>(name, default_val, flags);
}
- double& GVars2::GetDouble(const string& name, double default_val, bool
silent)
+ double& GVars2::GetDouble(const string& name, double default_val, int
flags)
{
- return Get<double>(name, default_val, silent);
+ return Get<double>(name, default_val, flags);
}
- string& GVars2::GetString(const string& name, const string&
default_val, bool silent)
+ string& GVars2::GetString(const string& name, const string&
default_val, int flags)
{
- return Get<string>(name, default_val, silent);
+ return Get<string>(name, default_val, flags);
}
- Vector<>& GVars2::GetVector(const string& name, const Vector<>&
default_val, bool silent)
+ Vector<>& GVars2::GetVector(const string& name, const Vector<>&
default_val, int flags)
{
- return Get<Vector<> >(name, default_val, silent);
+ return Get<Vector<> >(name, default_val, flags);
}
- Matrix<>& GVars2::GetMatrix(const string& name, const Matrix<>&
default_val, bool silent)
+ Matrix<>& GVars2::GetMatrix(const string& name, const Matrix<>&
default_val, int flags)
{
- return Get<Matrix<> >(name, default_val, silent);
+ return Get<Matrix<> >(name, default_val, flags);
}
- int& GVars2::GetInt(const string& name, const string& default_val, bool
silent)
+ int& GVars2::GetInt(const string& name, const string& default_val, int
flags)
{
- return Get<int>(name, default_val, silent);
+ return Get<int>(name, default_val, flags);
}
- double& GVars2::GetDouble(const string& name, const string&
default_val, bool silent)
+ double& GVars2::GetDouble(const string& name, const string&
default_val, int flags)
{
- return Get<double>(name, default_val, silent);
+ return Get<double>(name, default_val, flags);
}
- Vector<>& GVars2::GetVector(const string& name, const string&
default_val, bool silent)
+ Vector<>& GVars2::GetVector(const string& name, const string&
default_val, int flags)
{
- return Get<Vector<> >(name, default_val, silent);
+ return Get<Vector<> >(name, default_val, flags);
}
- Matrix<>& GVars2::GetMatrix(const string& name, const string&
default_val, bool silent)
+ Matrix<>& GVars2::GetMatrix(const string& name, const string&
default_val, int flags)
{
- return Get<Matrix<> >(name, default_val, silent);
+ return Get<Matrix<> >(name, default_val, flags);
}
Index: src/gvars3.cc
===================================================================
RCS file: /sources/libcvd/gvars3/src/gvars3.cc,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- src/gvars3.cc 24 May 2006 14:04:44 -0000 1.9
+++ src/gvars3.cc 11 Feb 2007 00:09:14 -0000 1.10
@@ -22,6 +22,7 @@
#include "gvars3/gvars3.h"
#include <vector>
#include <algorithm>
+#include <fnmatch.h>
using namespace std;
using namespace TooN;
@@ -30,7 +31,7 @@
{
std::map<std::string, std::string> GV3::unmatched_tags;
- std::map<std::string, BaseMap*> GV3::typeof_tags;
+ std::map<std::string, std::pair<BaseMap*,int> >
GV3::registered_type_and_trait;
std::list<BaseMap*> GV3::maps;
@@ -42,8 +43,8 @@
string GV3::get_var(string name)
{
- if(typeof_tags.count(name))
- return typeof_tags[name]->get_as_string(name);
+ if(registered_type_and_trait.count(name))
+ return
registered_type_and_trait[name].first->get_as_string(name);
else if(unmatched_tags.count(name))
return unmatched_tags[name];
else
@@ -52,11 +53,11 @@
bool GV3::set_var(string name, string val, bool silent)
{
- if(typeof_tags.count(name))
+ if(registered_type_and_trait.count(name))
{
- int e = typeof_tags[name]->set_from_string(name, val);
+ int e =
registered_type_and_trait[name].first->set_from_string(name, val);
if(!silent)
- parse_warning(e, typeof_tags[name]->name(),
name, val);
+ parse_warning(e,
registered_type_and_trait[name].first->name(), name, val);
return e==0;
}
else
@@ -66,25 +67,35 @@
}
}
- void GV3::print_var_list(ostream& o)
+ void GV3::print_var_list(ostream& o, string pattern, bool show_all)
{
+ bool no_pattern = (pattern=="");
+
+ if(show_all)
o << "//Registered GVars:" << endl;
- for(map<string, BaseMap*>::iterator i=typeof_tags.begin(); i !=
typeof_tags.end(); i++)
- cout << i->first << "=" << get_var(i->first) << endl;
+ 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;
+ if(show_all)
+ {
o << "//Unmatched tags:" << endl;
for(map<string,string>::iterator i=unmatched_tags.begin(); i !=
unmatched_tags.end(); i++)
+ if(no_pattern || !fnmatch(pattern.c_str(),
i->first.c_str(), FNM_CASEFOLD))
o << i->first << "=" << i->second << endl;
+
o << "// End of GVar list." << endl;
+ };
}
vector<string> GV3::tag_list()
{
vector<string> v;
- for(map<string, BaseMap*>::iterator i=typeof_tags.begin(); i !=
typeof_tags.end(); i++)
+ for(map<string, std::pair<BaseMap*, int> >::iterator
i=registered_type_and_trait.begin(); i != registered_type_and_trait.end(); i++)
v.push_back(i->first);
return v;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libcvd-members] gvars3 main.cc gvars3/gv3_implementation.hh gva...,
Georg Klein <=