From 23761bade5e02e9ce30148a520d3c42bd8c380ff Mon Sep 17 00:00:00 2001 From: Peter Conrad Date: Mon, 13 May 2019 10:29:19 +0200 Subject: [PATCH 1/6] Dont inline generic pack/unpack to enable externalized serialization --- include/fc/io/raw.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/fc/io/raw.hpp b/include/fc/io/raw.hpp index 4e81b30..4247a7c 100755 --- a/include/fc/io/raw.hpp +++ b/include/fc/io/raw.hpp @@ -524,11 +524,11 @@ namespace fc { template - inline void pack( Stream& s, const T& v ) { + void pack( Stream& s, const T& v ) { fc::raw::detail::if_reflected< typename fc::reflector::is_defined >::pack(s,v); } template - inline void unpack( Stream& s, T& v ) + void unpack( Stream& s, T& v ) { try { fc::raw::detail::if_reflected< typename fc::reflector::is_defined >::unpack(s,v); } FC_RETHROW_EXCEPTIONS( warn, "error unpacking ${type}", ("type",fc::get_typename::name() ) ) } From a94d110b5d4f526caf1f2a49aae7c5057b62dde2 Mon Sep 17 00:00:00 2001 From: Peter Conrad Date: Wed, 15 May 2019 12:48:06 +0200 Subject: [PATCH 2/6] Get rid of some inlines --- include/fc/io/raw.hpp | 1 - include/fc/network/ip.hpp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/include/fc/io/raw.hpp b/include/fc/io/raw.hpp index 4247a7c..7e5b5f1 100755 --- a/include/fc/io/raw.hpp +++ b/include/fc/io/raw.hpp @@ -522,7 +522,6 @@ namespace fc { } - template void pack( Stream& s, const T& v ) { fc::raw::detail::if_reflected< typename fc::reflector::is_defined >::pack(s,v); diff --git a/include/fc/network/ip.hpp b/include/fc/network/ip.hpp index 5a1bd0c..1f23c5e 100755 --- a/include/fc/network/ip.hpp +++ b/include/fc/network/ip.hpp @@ -83,12 +83,12 @@ namespace fc { namespace raw { template - inline void pack( Stream& s, const ip::address& v ) + void pack( Stream& s, const ip::address& v ) { fc::raw::pack( s, uint32_t(v) ); } template - inline void unpack( Stream& s, ip::address& v ) + void unpack( Stream& s, ip::address& v ) { uint32_t _ip; fc::raw::unpack( s, _ip ); From 1893cb336c03c2f150f7bba0fb1c7cf607c50dc0 Mon Sep 17 00:00:00 2001 From: Peter Conrad Date: Mon, 20 May 2019 21:38:15 +0200 Subject: [PATCH 3/6] Separate exception declaration and implementation --- include/fc/exception/exception.hpp | 117 +++++++++++++++++------------ src/exception.cpp | 19 +++++ 2 files changed, 86 insertions(+), 50 deletions(-) diff --git a/include/fc/exception/exception.hpp b/include/fc/exception/exception.hpp index 6fb66fa..24bd0f9 100755 --- a/include/fc/exception/exception.hpp +++ b/include/fc/exception/exception.hpp @@ -5,6 +5,7 @@ */ #include #include +#include #include #include #include @@ -222,81 +223,97 @@ namespace fc }(); \ -#define FC_DECLARE_DERIVED_EXCEPTION( TYPE, BASE, CODE, WHAT ) \ +#define FC_DECLARE_DERIVED_EXCEPTION( TYPE, BASE, CODE ) \ class TYPE : public BASE \ { \ public: \ enum code_enum { \ code_value = CODE, \ }; \ - explicit TYPE( int64_t code, const std::string& name_value, const std::string& what_value ) \ - :BASE( code, name_value, what_value ){} \ - explicit TYPE( fc::log_message&& m, int64_t code, const std::string& name_value, const std::string& what_value ) \ - :BASE( std::move(m), code, name_value, what_value ){} \ - explicit TYPE( fc::log_messages&& m, int64_t code, const std::string& name_value, const std::string& what_value )\ - :BASE( std::move(m), code, name_value, what_value ){}\ - explicit TYPE( const fc::log_messages& m, int64_t code, const std::string& name_value, const std::string& what_value )\ - :BASE( m, code, name_value, what_value ){}\ - TYPE( const std::string& what_value, const fc::log_messages& m ) \ - :BASE( m, CODE, BOOST_PP_STRINGIZE(TYPE), what_value ){} \ - TYPE( fc::log_message&& m ) \ - :BASE( fc::move(m), CODE, BOOST_PP_STRINGIZE(TYPE), WHAT ){}\ - TYPE( fc::log_messages msgs ) \ - :BASE( fc::move( msgs ), CODE, BOOST_PP_STRINGIZE(TYPE), WHAT ) {} \ - TYPE( const TYPE& c ) \ - :BASE(c){} \ - TYPE( const BASE& c ) \ - :BASE(c){} \ - TYPE():BASE(CODE, BOOST_PP_STRINGIZE(TYPE), WHAT){}\ + explicit TYPE( int64_t code, const std::string& name_value, const std::string& what_value ); \ + explicit TYPE( fc::log_message&& m, int64_t code, const std::string& name_value, const std::string& what_value ); \ + explicit TYPE( fc::log_messages&& m, int64_t code, const std::string& name_value, const std::string& what_value );\ + explicit TYPE( const fc::log_messages& m, int64_t code, const std::string& name_value, const std::string& what_value );\ + explicit TYPE( const std::string& what_value, const fc::log_messages& m ); \ + explicit TYPE( fc::log_message&& m ); \ + explicit TYPE( fc::log_messages msgs ); \ + TYPE( TYPE&& c ) = default; \ + TYPE( const TYPE& c ); \ + TYPE( const BASE& c ); \ + explicit TYPE();\ \ - virtual std::shared_ptr dynamic_copy_exception()const\ - { return std::make_shared( *this ); } \ - virtual NO_RETURN void dynamic_rethrow_exception()const \ - { if( code() == CODE ) throw *this;\ - else fc::exception::dynamic_rethrow_exception(); \ - } \ + virtual std::shared_ptr dynamic_copy_exception()const;\ + virtual NO_RETURN void dynamic_rethrow_exception()const; \ }; - #define FC_DECLARE_EXCEPTION( TYPE, CODE, WHAT ) \ - FC_DECLARE_DERIVED_EXCEPTION( TYPE, fc::exception, CODE, WHAT ) +#define FC_IMPLEMENT_DERIVED_EXCEPTION( TYPE, BASE, CODE, WHAT ) \ + TYPE::TYPE( int64_t code, const std::string& name_value, const std::string& what_value ) \ + : BASE( code, name_value, what_value ) {} \ + TYPE::TYPE( fc::log_message&& m, int64_t code, const std::string& name_value, const std::string& what_value ) \ + : BASE( std::move(m), code, name_value, what_value ) {} \ + TYPE::TYPE( fc::log_messages&& m, int64_t code, const std::string& name_value, const std::string& what_value ) \ + : BASE( std::move(m), code, name_value, what_value ) {} \ + TYPE::TYPE( const fc::log_messages& m, int64_t code, const std::string& name_value, const std::string& what_value ) \ + : BASE( m, code, name_value, what_value ) {} \ + TYPE::TYPE( const std::string& what_value, const fc::log_messages& m ) \ + : BASE( m, CODE, BOOST_PP_STRINGIZE(TYPE), what_value ) {} \ + TYPE::TYPE( fc::log_message&& m ) \ + : BASE( std::move(m), CODE, BOOST_PP_STRINGIZE(TYPE), WHAT ) {} \ + TYPE::TYPE( fc::log_messages msgs ) \ + : BASE( std::move( msgs ), CODE, BOOST_PP_STRINGIZE(TYPE), WHAT ) {} \ + TYPE::TYPE( const TYPE& c ) : BASE(c) {} \ + TYPE::TYPE( const BASE& c ) : BASE(c) {} \ + TYPE::TYPE() : BASE(CODE, BOOST_PP_STRINGIZE(TYPE), WHAT) {} \ + \ + std::shared_ptr TYPE::dynamic_copy_exception()const \ + { \ + return std::make_shared( *this ); \ + } \ + NO_RETURN void TYPE::dynamic_rethrow_exception()const \ + { \ + if( code() == CODE ) throw *this;\ + else fc::exception::dynamic_rethrow_exception(); \ + } - FC_DECLARE_EXCEPTION( timeout_exception, timeout_exception_code, "Timeout" ); - FC_DECLARE_EXCEPTION( file_not_found_exception, file_not_found_exception_code, "File Not Found" ); +#define FC_DECLARE_EXCEPTION( TYPE, CODE ) \ + FC_DECLARE_DERIVED_EXCEPTION( TYPE, fc::exception, CODE ) + +#define FC_IMPLEMENT_EXCEPTION( TYPE, CODE, WHAT ) \ + FC_IMPLEMENT_DERIVED_EXCEPTION( TYPE, fc::exception, CODE, WHAT ) + + FC_DECLARE_EXCEPTION( timeout_exception, timeout_exception_code ); + FC_DECLARE_EXCEPTION( file_not_found_exception, file_not_found_exception_code ); /** - * @brief report's parse errors + * @brief reports parse errors */ - FC_DECLARE_EXCEPTION( parse_error_exception, parse_error_exception_code, "Parse Error" ); - FC_DECLARE_EXCEPTION( invalid_arg_exception, invalid_arg_exception_code, "Invalid Argument" ); + FC_DECLARE_EXCEPTION( parse_error_exception, parse_error_exception_code ); + FC_DECLARE_EXCEPTION( invalid_arg_exception, invalid_arg_exception_code ); /** * @brief reports when a key, guid, or other item is not found. */ - FC_DECLARE_EXCEPTION( key_not_found_exception, key_not_found_exception_code, "Key Not Found" ); - FC_DECLARE_EXCEPTION( bad_cast_exception, bad_cast_exception_code, "Bad Cast" ); - FC_DECLARE_EXCEPTION( out_of_range_exception, out_of_range_exception_code, "Out of Range" ); + FC_DECLARE_EXCEPTION( key_not_found_exception, key_not_found_exception_code ); + FC_DECLARE_EXCEPTION( bad_cast_exception, bad_cast_exception_code ); + FC_DECLARE_EXCEPTION( out_of_range_exception, out_of_range_exception_code ); /** @brief if an operation is unsupported or not valid this may be thrown */ - FC_DECLARE_EXCEPTION( invalid_operation_exception, - invalid_operation_exception_code, - "Invalid Operation" ); + FC_DECLARE_EXCEPTION( invalid_operation_exception, invalid_operation_exception_code ); /** @brief if an host name can not be resolved this may be thrown */ - FC_DECLARE_EXCEPTION( unknown_host_exception, - unknown_host_exception_code, - "Unknown Host" ); + FC_DECLARE_EXCEPTION( unknown_host_exception, unknown_host_exception_code ); /** * @brief used to report a canceled Operation */ - FC_DECLARE_EXCEPTION( canceled_exception, canceled_exception_code, "Canceled" ); + FC_DECLARE_EXCEPTION( canceled_exception, canceled_exception_code ); /** * @brief used inplace of assert() to report violations of pre conditions. */ - FC_DECLARE_EXCEPTION( assert_exception, assert_exception_code, "Assert Exception" ); - FC_DECLARE_EXCEPTION( eof_exception, eof_exception_code, "End Of File" ); - FC_DECLARE_EXCEPTION( null_optional, null_optional_code, "null optional" ); - FC_DECLARE_EXCEPTION( aes_exception, aes_error_code, "AES error" ); - FC_DECLARE_EXCEPTION( overflow_exception, overflow_code, "Integer Overflow" ); - FC_DECLARE_EXCEPTION( underflow_exception, underflow_code, "Integer Underflow" ); - FC_DECLARE_EXCEPTION( divide_by_zero_exception, divide_by_zero_code, "Integer Divide By Zero" ); + FC_DECLARE_EXCEPTION( assert_exception, assert_exception_code ); + FC_DECLARE_EXCEPTION( eof_exception, eof_exception_code ); + FC_DECLARE_EXCEPTION( null_optional, null_optional_code ); + FC_DECLARE_EXCEPTION( aes_exception, aes_error_code ); + FC_DECLARE_EXCEPTION( overflow_exception, overflow_code ); + FC_DECLARE_EXCEPTION( underflow_exception, underflow_code ); + FC_DECLARE_EXCEPTION( divide_by_zero_exception, divide_by_zero_code ); std::string except_str(); diff --git a/src/exception.cpp b/src/exception.cpp index 0e0b956..0693f1a 100755 --- a/src/exception.cpp +++ b/src/exception.cpp @@ -8,6 +8,25 @@ namespace fc { + FC_IMPLEMENT_EXCEPTION( timeout_exception, timeout_exception_code, "Timeout" ) + FC_IMPLEMENT_EXCEPTION( file_not_found_exception, file_not_found_exception_code, "File Not Found" ) + FC_IMPLEMENT_EXCEPTION( parse_error_exception, parse_error_exception_code, "Parse Error" ) + FC_IMPLEMENT_EXCEPTION( invalid_arg_exception, invalid_arg_exception_code, "Invalid Argument" ) + FC_IMPLEMENT_EXCEPTION( key_not_found_exception, key_not_found_exception_code, "Key Not Found" ) + FC_IMPLEMENT_EXCEPTION( bad_cast_exception, bad_cast_exception_code, "Bad Cast" ) + FC_IMPLEMENT_EXCEPTION( out_of_range_exception, out_of_range_exception_code, "Out of Range" ) + FC_IMPLEMENT_EXCEPTION( method_not_found_exception, method_not_found_exception_code, "Method Not Found" ); + FC_IMPLEMENT_EXCEPTION( invalid_operation_exception, invalid_operation_exception_code, "Invalid Operation" ) + FC_IMPLEMENT_EXCEPTION( unknown_host_exception, unknown_host_exception_code, "Unknown Host" ) + FC_IMPLEMENT_EXCEPTION( canceled_exception, canceled_exception_code, "Canceled" ) + FC_IMPLEMENT_EXCEPTION( assert_exception, assert_exception_code, "Assert Exception" ) + FC_IMPLEMENT_EXCEPTION( eof_exception, eof_exception_code, "End Of File" ) + FC_IMPLEMENT_EXCEPTION( null_optional, null_optional_code, "null optional" ) + FC_IMPLEMENT_EXCEPTION( aes_exception, aes_error_code, "AES error" ) + FC_IMPLEMENT_EXCEPTION( overflow_exception, overflow_code, "Integer Overflow" ) + FC_IMPLEMENT_EXCEPTION( underflow_exception, underflow_code, "Integer Underflow" ) + FC_IMPLEMENT_EXCEPTION( divide_by_zero_exception, divide_by_zero_code, "Integer Divide By Zero" ) + FC_REGISTER_EXCEPTIONS( (timeout_exception) (file_not_found_exception) (parse_error_exception) From 2343ab74f35e7188df0c63ad502b0ee9e7574310 Mon Sep 17 00:00:00 2001 From: gladcow Date: Thu, 19 Sep 2019 18:21:50 +0300 Subject: [PATCH 4/6] fix compilation errors --- include/fc/network/ip.hpp | 2 +- src/exception.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/include/fc/network/ip.hpp b/include/fc/network/ip.hpp index 1f23c5e..8c5f548 100755 --- a/include/fc/network/ip.hpp +++ b/include/fc/network/ip.hpp @@ -113,7 +113,7 @@ namespace fc { } } // namespace fc -FC_REFLECT_TYPENAME( fc::ip::address ) +FC_REFLECT_EMPTY( fc::ip::address ) FC_REFLECT_TYPENAME( fc::ip::endpoint ) namespace std { diff --git a/src/exception.cpp b/src/exception.cpp index 0693f1a..a7fc4fe 100755 --- a/src/exception.cpp +++ b/src/exception.cpp @@ -15,7 +15,6 @@ namespace fc FC_IMPLEMENT_EXCEPTION( key_not_found_exception, key_not_found_exception_code, "Key Not Found" ) FC_IMPLEMENT_EXCEPTION( bad_cast_exception, bad_cast_exception_code, "Bad Cast" ) FC_IMPLEMENT_EXCEPTION( out_of_range_exception, out_of_range_exception_code, "Out of Range" ) - FC_IMPLEMENT_EXCEPTION( method_not_found_exception, method_not_found_exception_code, "Method Not Found" ); FC_IMPLEMENT_EXCEPTION( invalid_operation_exception, invalid_operation_exception_code, "Invalid Operation" ) FC_IMPLEMENT_EXCEPTION( unknown_host_exception, unknown_host_exception_code, "Unknown Host" ) FC_IMPLEMENT_EXCEPTION( canceled_exception, canceled_exception_code, "Canceled" ) From 1cae4d3481f6c2ef263822f26bec60ce3989c718 Mon Sep 17 00:00:00 2001 From: pbattu123 Date: Mon, 6 Jan 2020 17:00:41 -0400 Subject: [PATCH 5/6] Revert "Merge pull request #13 from gladcow/feature/GRPH-92" This reverts commit c30f3b7d32502fc1a746cefa132848cb80a4129b, reversing changes made to 31e289c53d3625afea87c54edb6d97c3bca4c626. --- include/fc/exception/exception.hpp | 117 ++++++++++++----------------- include/fc/io/raw.hpp | 8 +- include/fc/network/ip.hpp | 13 ++-- src/exception.cpp | 18 ----- 4 files changed, 61 insertions(+), 95 deletions(-) diff --git a/include/fc/exception/exception.hpp b/include/fc/exception/exception.hpp index 34dbf42..091cc4b 100755 --- a/include/fc/exception/exception.hpp +++ b/include/fc/exception/exception.hpp @@ -5,7 +5,6 @@ */ #include #include -#include #include #include #include @@ -223,97 +222,81 @@ namespace fc }(); \ -#define FC_DECLARE_DERIVED_EXCEPTION( TYPE, BASE, CODE ) \ +#define FC_DECLARE_DERIVED_EXCEPTION( TYPE, BASE, CODE, WHAT ) \ class TYPE : public BASE \ { \ public: \ enum code_enum { \ code_value = CODE, \ }; \ - explicit TYPE( int64_t code, const std::string& name_value, const std::string& what_value ); \ - explicit TYPE( fc::log_message&& m, int64_t code, const std::string& name_value, const std::string& what_value ); \ - explicit TYPE( fc::log_messages&& m, int64_t code, const std::string& name_value, const std::string& what_value );\ - explicit TYPE( const fc::log_messages& m, int64_t code, const std::string& name_value, const std::string& what_value );\ - explicit TYPE( const std::string& what_value, const fc::log_messages& m ); \ - explicit TYPE( fc::log_message&& m ); \ - explicit TYPE( fc::log_messages msgs ); \ - TYPE( TYPE&& c ) = default; \ - TYPE( const TYPE& c ); \ - TYPE( const BASE& c ); \ - explicit TYPE();\ + explicit TYPE( int64_t code, const std::string& name_value, const std::string& what_value ) \ + :BASE( code, name_value, what_value ){} \ + explicit TYPE( fc::log_message&& m, int64_t code, const std::string& name_value, const std::string& what_value ) \ + :BASE( std::move(m), code, name_value, what_value ){} \ + explicit TYPE( fc::log_messages&& m, int64_t code, const std::string& name_value, const std::string& what_value )\ + :BASE( std::move(m), code, name_value, what_value ){}\ + explicit TYPE( const fc::log_messages& m, int64_t code, const std::string& name_value, const std::string& what_value )\ + :BASE( m, code, name_value, what_value ){}\ + TYPE( const std::string& what_value, const fc::log_messages& m ) \ + :BASE( m, CODE, BOOST_PP_STRINGIZE(TYPE), what_value ){} \ + TYPE( fc::log_message&& m ) \ + :BASE( fc::move(m), CODE, BOOST_PP_STRINGIZE(TYPE), WHAT ){}\ + TYPE( fc::log_messages msgs ) \ + :BASE( fc::move( msgs ), CODE, BOOST_PP_STRINGIZE(TYPE), WHAT ) {} \ + TYPE( const TYPE& c ) \ + :BASE(c){} \ + TYPE( const BASE& c ) \ + :BASE(c){} \ + TYPE():BASE(CODE, BOOST_PP_STRINGIZE(TYPE), WHAT){}\ \ - virtual std::shared_ptr dynamic_copy_exception()const;\ - virtual NO_RETURN void dynamic_rethrow_exception()const; \ + virtual std::shared_ptr dynamic_copy_exception()const\ + { return std::make_shared( *this ); } \ + virtual NO_RETURN void dynamic_rethrow_exception()const \ + { if( code() == CODE ) throw *this;\ + else fc::exception::dynamic_rethrow_exception(); \ + } \ }; -#define FC_IMPLEMENT_DERIVED_EXCEPTION( TYPE, BASE, CODE, WHAT ) \ - TYPE::TYPE( int64_t code, const std::string& name_value, const std::string& what_value ) \ - : BASE( code, name_value, what_value ) {} \ - TYPE::TYPE( fc::log_message&& m, int64_t code, const std::string& name_value, const std::string& what_value ) \ - : BASE( std::move(m), code, name_value, what_value ) {} \ - TYPE::TYPE( fc::log_messages&& m, int64_t code, const std::string& name_value, const std::string& what_value ) \ - : BASE( std::move(m), code, name_value, what_value ) {} \ - TYPE::TYPE( const fc::log_messages& m, int64_t code, const std::string& name_value, const std::string& what_value ) \ - : BASE( m, code, name_value, what_value ) {} \ - TYPE::TYPE( const std::string& what_value, const fc::log_messages& m ) \ - : BASE( m, CODE, BOOST_PP_STRINGIZE(TYPE), what_value ) {} \ - TYPE::TYPE( fc::log_message&& m ) \ - : BASE( std::move(m), CODE, BOOST_PP_STRINGIZE(TYPE), WHAT ) {} \ - TYPE::TYPE( fc::log_messages msgs ) \ - : BASE( std::move( msgs ), CODE, BOOST_PP_STRINGIZE(TYPE), WHAT ) {} \ - TYPE::TYPE( const TYPE& c ) : BASE(c) {} \ - TYPE::TYPE( const BASE& c ) : BASE(c) {} \ - TYPE::TYPE() : BASE(CODE, BOOST_PP_STRINGIZE(TYPE), WHAT) {} \ - \ - std::shared_ptr TYPE::dynamic_copy_exception()const \ - { \ - return std::make_shared( *this ); \ - } \ - NO_RETURN void TYPE::dynamic_rethrow_exception()const \ - { \ - if( code() == CODE ) throw *this;\ - else fc::exception::dynamic_rethrow_exception(); \ - } + #define FC_DECLARE_EXCEPTION( TYPE, CODE, WHAT ) \ + FC_DECLARE_DERIVED_EXCEPTION( TYPE, fc::exception, CODE, WHAT ) -#define FC_DECLARE_EXCEPTION( TYPE, CODE ) \ - FC_DECLARE_DERIVED_EXCEPTION( TYPE, fc::exception, CODE ) - -#define FC_IMPLEMENT_EXCEPTION( TYPE, CODE, WHAT ) \ - FC_IMPLEMENT_DERIVED_EXCEPTION( TYPE, fc::exception, CODE, WHAT ) - - FC_DECLARE_EXCEPTION( timeout_exception, timeout_exception_code ); - FC_DECLARE_EXCEPTION( file_not_found_exception, file_not_found_exception_code ); + FC_DECLARE_EXCEPTION( timeout_exception, timeout_exception_code, "Timeout" ); + FC_DECLARE_EXCEPTION( file_not_found_exception, file_not_found_exception_code, "File Not Found" ); /** - * @brief reports parse errors + * @brief report's parse errors */ - FC_DECLARE_EXCEPTION( parse_error_exception, parse_error_exception_code ); - FC_DECLARE_EXCEPTION( invalid_arg_exception, invalid_arg_exception_code ); + FC_DECLARE_EXCEPTION( parse_error_exception, parse_error_exception_code, "Parse Error" ); + FC_DECLARE_EXCEPTION( invalid_arg_exception, invalid_arg_exception_code, "Invalid Argument" ); /** * @brief reports when a key, guid, or other item is not found. */ - FC_DECLARE_EXCEPTION( key_not_found_exception, key_not_found_exception_code ); - FC_DECLARE_EXCEPTION( bad_cast_exception, bad_cast_exception_code ); - FC_DECLARE_EXCEPTION( out_of_range_exception, out_of_range_exception_code ); + FC_DECLARE_EXCEPTION( key_not_found_exception, key_not_found_exception_code, "Key Not Found" ); + FC_DECLARE_EXCEPTION( bad_cast_exception, bad_cast_exception_code, "Bad Cast" ); + FC_DECLARE_EXCEPTION( out_of_range_exception, out_of_range_exception_code, "Out of Range" ); /** @brief if an operation is unsupported or not valid this may be thrown */ - FC_DECLARE_EXCEPTION( invalid_operation_exception, invalid_operation_exception_code ); + FC_DECLARE_EXCEPTION( invalid_operation_exception, + invalid_operation_exception_code, + "Invalid Operation" ); /** @brief if an host name can not be resolved this may be thrown */ - FC_DECLARE_EXCEPTION( unknown_host_exception, unknown_host_exception_code ); + FC_DECLARE_EXCEPTION( unknown_host_exception, + unknown_host_exception_code, + "Unknown Host" ); /** * @brief used to report a canceled Operation */ - FC_DECLARE_EXCEPTION( canceled_exception, canceled_exception_code ); + FC_DECLARE_EXCEPTION( canceled_exception, canceled_exception_code, "Canceled" ); /** * @brief used inplace of assert() to report violations of pre conditions. */ - FC_DECLARE_EXCEPTION( assert_exception, assert_exception_code ); - FC_DECLARE_EXCEPTION( eof_exception, eof_exception_code ); - FC_DECLARE_EXCEPTION( null_optional, null_optional_code ); - FC_DECLARE_EXCEPTION( aes_exception, aes_error_code ); - FC_DECLARE_EXCEPTION( overflow_exception, overflow_code ); - FC_DECLARE_EXCEPTION( underflow_exception, underflow_code ); - FC_DECLARE_EXCEPTION( divide_by_zero_exception, divide_by_zero_code ); + FC_DECLARE_EXCEPTION( assert_exception, assert_exception_code, "Assert Exception" ); + FC_DECLARE_EXCEPTION( eof_exception, eof_exception_code, "End Of File" ); + FC_DECLARE_EXCEPTION( null_optional, null_optional_code, "null optional" ); + FC_DECLARE_EXCEPTION( aes_exception, aes_error_code, "AES error" ); + FC_DECLARE_EXCEPTION( overflow_exception, overflow_code, "Integer Overflow" ); + FC_DECLARE_EXCEPTION( underflow_exception, underflow_code, "Integer Underflow" ); + FC_DECLARE_EXCEPTION( divide_by_zero_exception, divide_by_zero_code, "Integer Divide By Zero" ); std::string except_str(); diff --git a/include/fc/io/raw.hpp b/include/fc/io/raw.hpp index bb97647..2125865 100755 --- a/include/fc/io/raw.hpp +++ b/include/fc/io/raw.hpp @@ -616,12 +616,14 @@ namespace fc { } + template - void pack( Stream& s, const T& v ) { - fc::raw::detail::if_reflected< typename fc::reflector::is_defined >::pack(s,v); + inline void pack( Stream& s, const T& v, uint32_t _max_depth ) { + FC_ASSERT( _max_depth > 0 ); + fc::raw::detail::if_reflected< typename fc::reflector::is_defined >::pack( s, v, _max_depth - 1 ); } template - void unpack( Stream& s, T& v ) + inline void unpack( Stream& s, T& v, uint32_t _max_depth ) { try { FC_ASSERT( _max_depth > 0 ); fc::raw::detail::if_reflected< typename fc::reflector::is_defined >::unpack( s, v, _max_depth - 1 ); diff --git a/include/fc/network/ip.hpp b/include/fc/network/ip.hpp index d428e60..7a55616 100755 --- a/include/fc/network/ip.hpp +++ b/include/fc/network/ip.hpp @@ -82,14 +82,14 @@ namespace fc { namespace raw { - template - void pack( Stream& s, const ip::address& v ) + template + inline void pack( Stream& s, const ip::address& v, uint32_t _max_depth=FC_PACK_MAX_DEPTH ) { FC_ASSERT( _max_depth > 0 ); fc::raw::pack( s, uint32_t(v), _max_depth - 1 ); } - template - void unpack( Stream& s, ip::address& v ) + template + inline void unpack( Stream& s, ip::address& v, uint32_t _max_depth=FC_PACK_MAX_DEPTH ) { FC_ASSERT( _max_depth > 0 ); uint32_t _ip; @@ -119,9 +119,8 @@ namespace fc { } } // namespace fc - -FC_REFLECT_EMPTY( fc::ip::address ) -FC_REFLECT_TYPENAME( fc::ip::endpoint ) +FC_REFLECT_TYPENAME( fc::ip::address ) +FC_REFLECT_TYPENAME( fc::ip::endpoint ) namespace std { template<> diff --git a/src/exception.cpp b/src/exception.cpp index ce67b4a..1f84286 100755 --- a/src/exception.cpp +++ b/src/exception.cpp @@ -8,24 +8,6 @@ namespace fc { - FC_IMPLEMENT_EXCEPTION( timeout_exception, timeout_exception_code, "Timeout" ) - FC_IMPLEMENT_EXCEPTION( file_not_found_exception, file_not_found_exception_code, "File Not Found" ) - FC_IMPLEMENT_EXCEPTION( parse_error_exception, parse_error_exception_code, "Parse Error" ) - FC_IMPLEMENT_EXCEPTION( invalid_arg_exception, invalid_arg_exception_code, "Invalid Argument" ) - FC_IMPLEMENT_EXCEPTION( key_not_found_exception, key_not_found_exception_code, "Key Not Found" ) - FC_IMPLEMENT_EXCEPTION( bad_cast_exception, bad_cast_exception_code, "Bad Cast" ) - FC_IMPLEMENT_EXCEPTION( out_of_range_exception, out_of_range_exception_code, "Out of Range" ) - FC_IMPLEMENT_EXCEPTION( invalid_operation_exception, invalid_operation_exception_code, "Invalid Operation" ) - FC_IMPLEMENT_EXCEPTION( unknown_host_exception, unknown_host_exception_code, "Unknown Host" ) - FC_IMPLEMENT_EXCEPTION( canceled_exception, canceled_exception_code, "Canceled" ) - FC_IMPLEMENT_EXCEPTION( assert_exception, assert_exception_code, "Assert Exception" ) - FC_IMPLEMENT_EXCEPTION( eof_exception, eof_exception_code, "End Of File" ) - FC_IMPLEMENT_EXCEPTION( null_optional, null_optional_code, "null optional" ) - FC_IMPLEMENT_EXCEPTION( aes_exception, aes_error_code, "AES error" ) - FC_IMPLEMENT_EXCEPTION( overflow_exception, overflow_code, "Integer Overflow" ) - FC_IMPLEMENT_EXCEPTION( underflow_exception, underflow_code, "Integer Underflow" ) - FC_IMPLEMENT_EXCEPTION( divide_by_zero_exception, divide_by_zero_code, "Integer Divide By Zero" ) - FC_REGISTER_EXCEPTIONS( (timeout_exception) (file_not_found_exception) (parse_error_exception) From a76b9ff81c6887ebe1dc9fa03ef15e1433029c65 Mon Sep 17 00:00:00 2001 From: pbattu123 Date: Thu, 20 Feb 2020 12:19:22 -0400 Subject: [PATCH 6/6] include fc build optimization changes --- include/fc/io/raw.hpp | 4 ++-- include/fc/network/ip.hpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/fc/io/raw.hpp b/include/fc/io/raw.hpp index 2125865..80d97e3 100755 --- a/include/fc/io/raw.hpp +++ b/include/fc/io/raw.hpp @@ -618,12 +618,12 @@ namespace fc { template - inline void pack( Stream& s, const T& v, uint32_t _max_depth ) { + void pack( Stream& s, const T& v, uint32_t _max_depth ) { FC_ASSERT( _max_depth > 0 ); fc::raw::detail::if_reflected< typename fc::reflector::is_defined >::pack( s, v, _max_depth - 1 ); } template - inline void unpack( Stream& s, T& v, uint32_t _max_depth ) + void unpack( Stream& s, T& v, uint32_t _max_depth ) { try { FC_ASSERT( _max_depth > 0 ); fc::raw::detail::if_reflected< typename fc::reflector::is_defined >::unpack( s, v, _max_depth - 1 ); diff --git a/include/fc/network/ip.hpp b/include/fc/network/ip.hpp index 7a55616..58f7516 100755 --- a/include/fc/network/ip.hpp +++ b/include/fc/network/ip.hpp @@ -83,13 +83,13 @@ namespace fc { namespace raw { template - inline void pack( Stream& s, const ip::address& v, uint32_t _max_depth=FC_PACK_MAX_DEPTH ) + void pack( Stream& s, const ip::address& v, uint32_t _max_depth=FC_PACK_MAX_DEPTH ) { FC_ASSERT( _max_depth > 0 ); fc::raw::pack( s, uint32_t(v), _max_depth - 1 ); } template - inline void unpack( Stream& s, ip::address& v, uint32_t _max_depth=FC_PACK_MAX_DEPTH ) + void unpack( Stream& s, ip::address& v, uint32_t _max_depth=FC_PACK_MAX_DEPTH ) { FC_ASSERT( _max_depth > 0 ); uint32_t _ip; @@ -119,7 +119,7 @@ namespace fc { } } // namespace fc -FC_REFLECT_TYPENAME( fc::ip::address ) +FC_REFLECT_EMPTY( fc::ip::address ) FC_REFLECT_TYPENAME( fc::ip::endpoint ) namespace std {