[med-svn] [aghermann] 22/60: improve on 3755a8a5f0d0593, new in common/lang.hh: enum TThrowOption
andrei zavada
hmmr-guest at alioth.debian.org
Mon Nov 4 23:49:55 UTC 2013
This is an automated email from the git hooks/post-receive script.
hmmr-guest pushed a commit to branch WIP
in repository aghermann.
commit 3266daa39e1fb342c3b7269ad76799cf47309a30
Author: Andrei Zavada <johnhommer at gmail.com>
Date: Sun Oct 13 22:47:54 2013 +0300
improve on 3755a8a5f0d0593, new in common/lang.hh: enum TThrowOption
---
upstream/src/aghermann/expdesign/dirlevel.cc | 2 +-
upstream/src/aghermann/expdesign/loadsave.cc | 2 +-
upstream/src/aghermann/ui/mw/loadsave.cc | 8 +--
upstream/src/aghermann/ui/sf/sf.cc | 4 +-
upstream/src/common/config-validate.hh | 73 ++++++++++++++++----------
upstream/src/common/lang.hh | 7 ++-
6 files changed, 60 insertions(+), 36 deletions(-)
diff --git a/upstream/src/aghermann/expdesign/dirlevel.cc b/upstream/src/aghermann/expdesign/dirlevel.cc
index 481d95a..5c3cb43 100644
--- a/upstream/src/aghermann/expdesign/dirlevel.cc
+++ b/upstream/src/aghermann/expdesign/dirlevel.cc
@@ -85,7 +85,7 @@ load()
try {
C.readFile( path().c_str());
- config.get( C, agh::global::default_log_facility);
+ config.get( C, agh::global::default_log_facility, agh::TThrowOption::do_throw);
saved = true;
return 0;
diff --git a/upstream/src/aghermann/expdesign/loadsave.cc b/upstream/src/aghermann/expdesign/loadsave.cc
index d406e26..e7e7d90 100644
--- a/upstream/src/aghermann/expdesign/loadsave.cc
+++ b/upstream/src/aghermann/expdesign/loadsave.cc
@@ -29,7 +29,7 @@ load_settings()
try {
conf.readFile( EXPD_FILE);
- config.get( conf, agh::global::default_log_facility);
+ config.get( conf, agh::global::default_log_facility, agh::TThrowOption::do_throw);
for ( size_t t = 0; t < ach::TTunable::_basic_tunables; ++t ) {
auto& A = conf.lookup(string("tunable.") + ach::tunable_name(t));
diff --git a/upstream/src/aghermann/ui/mw/loadsave.cc b/upstream/src/aghermann/ui/mw/loadsave.cc
index 771fc0f..6fe5e56 100644
--- a/upstream/src/aghermann/ui/mw/loadsave.cc
+++ b/upstream/src/aghermann/ui/mw/loadsave.cc
@@ -86,14 +86,14 @@ load_settings()
try {
conf.readFile( CONF_FILE);
- config.get( conf, agh::global::default_log_facility);
+ config.get( conf, agh::global::default_log_facility, agh::TThrowOption::do_throw);
try {
auto& SC = conf.lookup("ScoreCodes");
for ( size_t i = sigfile::SPage::TScore::none; i < sigfile::SPage::TScore::TScore_total; ++i )
ext_score_codes[i].assign( (const char*)SC[i]);
} catch (...) {
- fprintf( stderr, "SExpDesignUI::load_settings(): Something is wrong with section ScoreCodes in %s\n", CONF_FILE);
+ APPLOG_WARN ("Something is wrong with section ScoreCodes in \"%s\"", CONF_FILE);
}
for( auto &p : saving_colors() ) {
try {
@@ -105,11 +105,11 @@ load_settings()
C.clr.alpha = V[3];
gtk_color_chooser_set_rgba( GTK_COLOR_CHOOSER (CwB[p.second].btn), &C.clr);
} catch (...) {
- fprintf( stderr, "SExpDesignUI::load_settings(): Something is wrong with Color.%s in %s\n", p.first, CONF_FILE);
+ APPLOG_WARN ("Something is wrong with Color.%s in \"%s\"", p.first, CONF_FILE);
}
}
} catch (...) {
- fprintf( stderr, "SExpDesignUI::load_settings(): Something is wrong with %s\n", CONF_FILE);
+ APPLOG_WARN( "Something is wrong with contents of \"%s\"", CONF_FILE);
}
// plus postprocess and extra checks
diff --git a/upstream/src/aghermann/ui/sf/sf.cc b/upstream/src/aghermann/ui/sf/sf.cc
index 3ce5e9c..e8c430d 100644
--- a/upstream/src/aghermann/ui/sf/sf.cc
+++ b/upstream/src/aghermann/ui/sf/sf.cc
@@ -741,10 +741,10 @@ load_montage()
} catch (libconfig::FileIOException ex) {
return;
}
- config.get( conf, agh::global::default_log_facility);
+ config.get( conf, agh::global::default_log_facility, agh::TThrowOption::no_throw);
for ( auto &h : channels ) {
- h.config.get( conf, agh::global::default_log_facility);
+ h.config.get( conf, agh::global::default_log_facility, agh::TThrowOption::no_throw);
// postprocess a little
h.selection_start = h.selection_start_time * h.samplerate();
diff --git a/upstream/src/common/config-validate.hh b/upstream/src/common/config-validate.hh
index da52bcd..f2ba3e0 100644
--- a/upstream/src/common/config-validate.hh
+++ b/upstream/src/common/config-validate.hh
@@ -64,7 +64,7 @@ ensure_path( libconfig::Setting& S, libconfig::Setting::Type type, const string&
template <typename T>
void
-put( libconfig::Config& C, const string& key, const T& value, agh::log::CLogFacility* lo = nullptr)
+put( libconfig::Config& C, const string& key, const T& value, agh::log::CLogFacility* lo)
{
ensure_path( C.getRoot(), libconfig_type_id<T>(), key) = value;
}
@@ -99,8 +99,8 @@ put( libconfig::Config& C, const string& key, const array<T, N>& vl)
struct IValidator {
- virtual void get( const libconfig::Config&, agh::log::CLogFacility*) const = 0;
- virtual void put( libconfig::Config&, agh::log::CLogFacility*) const = 0;
+ virtual void get( const libconfig::Config&, agh::log::CLogFacility*, agh::TThrowOption) const = 0;
+ virtual void put( libconfig::Config&, agh::log::CLogFacility*) const = 0;
virtual ~IValidator() {} // -Wdelete-non-virtual-dtor
};
@@ -134,21 +134,28 @@ struct SValidator : IValidator {
: key (_key), rcp (_rcp), valf (_valf)
{}
- void get( const libconfig::Config& C, agh::log::CLogFacility* lo = nullptr) const
+ void
+ get( const libconfig::Config& C,
+ agh::log::CLogFacility* lo,
+ agh::TThrowOption throw_option) const
{
T tmp;
if ( not C.lookupValue( key, tmp) ) {
if ( lo )
- lo->msg( agh::log::TLevel::warning, LOG_SOURCE_ISSUER, "key %s not found", key.c_str());
+ lo->msg( agh::log::TLevel::warning, LOG_SOURCE_ISSUER, "Key \"%s\" not found", key.c_str());
return; // leave at default
}
- if ( not valf(tmp) )
- throw invalid_argument( string("Bad value for \"") + key + "\"");
- *rcp = tmp;
+ if ( not valf(tmp) ) {
+ lo->msg( agh::log::TLevel::warning, LOG_SOURCE_ISSUER, "Bsd value for key \"%s\"", key.c_str());
+ if ( throw_option == TThrowOption::do_throw )
+ throw invalid_argument( string("Bad value for \"") + key + "\"");
+ } else
+ *rcp = tmp;
}
- void put( libconfig::Config& C, agh::log::CLogFacility* lo = nullptr) const
+ void
+ put( libconfig::Config& C, agh::log::CLogFacility* lo) const
{
- confval::put( C, key, *rcp);
+ confval::put( C, key, *rcp, lo);
}
};
@@ -175,17 +182,22 @@ struct SValidator : IValidator {
template <>
inline void
SValidator<size_t>::
-get( const libconfig::Config& C, agh::log::CLogFacility* lo) const
+get( const libconfig::Config& C,
+ agh::log::CLogFacility* lo,
+ agh::TThrowOption throw_option) const
{
int tmp; // libconfig doesn't deal in unsigned values
if ( not C.lookupValue( key, tmp) ) {
if (lo)
- lo->msg( agh::log::TLevel::warning, LOG_SOURCE_ISSUER, "key %s not found", key.c_str());
+ lo->msg( agh::log::TLevel::warning, LOG_SOURCE_ISSUER, "Key %s not found", key.c_str());
return; // leave at default
}
- if ( not valf(tmp) )
- throw invalid_argument( string("Bad value for \"") + key + "\"");
- *rcp = tmp;
+ if ( tmp < 0 || not valf((size_t)tmp) ) {
+ lo->msg( agh::log::TLevel::warning, LOG_SOURCE_ISSUER, "Bad value for key \"%s\"", key.c_str());
+ if ( throw_option == TThrowOption::do_throw )
+ throw invalid_argument( string("Bad value for \"") + key + "\"");
+ } else
+ *rcp = tmp;
}
@@ -193,26 +205,29 @@ template <typename T>
void
get( list<SValidator<T>>& vl,
libconfig::Config& conf,
- bool nothrow = true)
+ agh::log::CLogFacility* lo,
+ agh::TThrowOption throw_option)
{
for ( auto& V : vl )
- if ( nothrow )
+ if ( throw_option == TThrowOption::no_throw )
try {
- V.get( conf);
+ V.get( conf, lo);
} catch ( exception& ex) {
- fprintf( stderr, "confval::get(list): %s\n", ex.what());
+ if ( lo )
+ lo->msg( agh::log::TLevel::warning, LOG_SOURCE_ISSUER, "get(list): %s", ex.what());
}
else
- V.get( conf);
+ V.get( conf, lo);
}
template <typename T>
void
put( list<SValidator<T>>& vl,
- libconfig::Config& conf)
+ libconfig::Config& conf,
+ agh::log::CLogFacility* lo)
{
for ( auto& V : vl )
- V.put( conf);
+ V.put( conf, lo);
}
@@ -230,19 +245,23 @@ class CConfigKeys {
}
template <class K, class V>
- CConfigKeys& operator()( const K& k, V* v)
+ CConfigKeys&
+ operator()( const K& k, V* v)
{ return S.push_back( new SValidator<V>(k, v)), *this; }
template <class K, class V, class F>
- CConfigKeys& operator()( const K& k, V* v, const F& f)
+ CConfigKeys&
+ operator()( const K& k, V* v, const F& f)
{ return S.push_back( new SValidator<V>(k, v, f)), *this; }
- void get( libconfig::Config& C, agh::log::CLogFacility* lo)
+ void
+ get( libconfig::Config& C, agh::log::CLogFacility* lo, agh::TThrowOption throw_option)
{
for ( auto& K : S )
- K->get( C, lo);
+ K->get( C, lo, throw_option);
}
- void put( libconfig::Config& C, agh::log::CLogFacility* lo)
+ void
+ put( libconfig::Config& C, agh::log::CLogFacility* lo)
{
for ( auto& K : S )
K->put( C, lo);
diff --git a/upstream/src/common/lang.hh b/upstream/src/common/lang.hh
index 66f6edb..ce239f3 100644
--- a/upstream/src/common/lang.hh
+++ b/upstream/src/common/lang.hh
@@ -25,11 +25,16 @@ using namespace std;
namespace agh {
+// for functions to suppress some possibly benign exceptions:
+enum class TThrowOption {
+ do_throw,
+ no_throw,
+};
typedef unsigned long hash_t;
inline int dbl_cmp( double x, double y) __attribute__ ((pure));
-inline int dbl_cmp( double x, double y)
+inline int dbl_cmp( double x, double y) // optional precision maybe?
{
if ( fabs(x - y) > DBL_EPSILON )
return (x > y) ? 1 : -1;
--
Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/aghermann.git
More information about the debian-med-commit
mailing list