diff --git a/libgrive/src/json/Val.cc b/libgrive/src/json/Val.cc index 51ad62c..2facfff 100644 --- a/libgrive/src/json/Val.cc +++ b/libgrive/src/json/Val.cc @@ -123,7 +123,7 @@ std::string Val::Str() const Val::operator std::string() const { - return As() ; + return Str(); } int Val::Int() const diff --git a/libgrive/src/json/Val.hh b/libgrive/src/json/Val.hh index dfc2d33..4c8b9cc 100644 --- a/libgrive/src/json/Val.hh +++ b/libgrive/src/json/Val.hh @@ -194,35 +194,29 @@ Val& Val::Assign( const T& t ) template const T& Val::As() const { - try - { - const Impl *impl = dynamic_cast *>( m_base.get() ) ; - return impl->val ; - } - catch ( std::exception& e ) + const Impl *impl = dynamic_cast *>( m_base.get() ) ; + if ( !impl ) { TypeEnum dest = Type2Enum::type ; BOOST_THROW_EXCEPTION( - Error() << SrcType_(Type()) << DestType_(dest) + Error() << SrcType_( Type() ) << DestType_( dest ) ) ; } + return impl->val ; } template T& Val::As() { - try - { - Impl *impl = dynamic_cast *>( m_base.get() ) ; - return impl->val ; - } - catch ( std::exception& e ) + Impl *impl = dynamic_cast *>( m_base.get() ) ; + if ( !impl ) { TypeEnum dest = Type2Enum::type ; BOOST_THROW_EXCEPTION( - Error() << SrcType_(Type()) << DestType_(dest) + Error() << SrcType_( Type() ) << DestType_( dest ) ) ; } + return impl->val ; } template diff --git a/libgrive/test/btest/ValTest.cc b/libgrive/test/btest/ValTest.cc index 5514825..31c2cdb 100644 --- a/libgrive/test/btest/ValTest.cc +++ b/libgrive/test/btest/ValTest.cc @@ -19,6 +19,7 @@ #include "json/Val.hh" #include +#include using namespace gr ; @@ -33,11 +34,11 @@ BOOST_FIXTURE_TEST_SUITE( ValTest, Fixture ) BOOST_AUTO_TEST_CASE( TestSimpleTypes ) { - Val null ; - BOOST_CHECK_EQUAL( null.Type(), Val::null_type ) ; - BOOST_CHECK( null.Is() ) ; + BOOST_CHECK_EQUAL( Val::Null().Type(), Val::null_type ) ; + BOOST_CHECK( Val::Null().Is() ) ; Val i( 100 ) ; + BOOST_CHECK_EQUAL( i.Str(), "100" ); BOOST_CHECK_EQUAL( i.As(), 100 ) ; BOOST_CHECK_EQUAL( i.Type(), Val::int_type ) ; }