19 info() <<
"initialize" <<
endmsg;
21 for (
const auto& itr : m_pFilter.value() ) {
25 parseFilter( itr, fnc, lib );
29 m_filterfnc.insert( fnc );
34 m_filterlib.insert( lib );
45 info() <<
"reinitialize" <<
endmsg;
53 if ( !m_dat.empty() ) {
55 info() <<
"listing all unchecked return codes:" <<
endmsg;
61 if ( msgLevel(
MSG::DEBUG ) ) debug() <<
"all StatusCode instances where checked" <<
endmsg;
79 const auto len = lib.
length();
80 if ( len >= 3 && lib.
compare( len - 3, 3,
".so" ) == 0 ) {
81 if ( ( len >= 7 && ( lib.
compare( len - 7, 4,
"Dict" ) == 0 || lib.
compare( len - 7, 4,
"Core" ) == 0 ) ) ||
82 ( len >= 8 && lib.
compare( len - 8, 5,
"Cling" ) == 0 ) ) {
85 }
else if ( lib.
rfind(
"Dict.so" ) != std::string::npos || lib.
rfind(
"Cling.so" ) != std::string::npos ||
86 lib.
rfind(
"Core.so" ) != std::string::npos ) {
91 if ( fnc ==
"_PyObject_GC_Malloc" )
return;
93 if ( fnc ==
"PyThread_get_thread_ident" )
return;
94 if ( fnc ==
"local" )
return;
97 const string rlib = lib.
substr( lib.
rfind(
"/" ) + 1 );
99 if ( m_filterfnc.find( fnc ) != m_filterfnc.end() || m_filterlib.find( rlib ) != m_filterlib.end() ) {
return; }
103 fatal() <<
"Unchecked StatusCode in " << fnc <<
" from lib " << lib <<
endmsg;
107 string key = fnc + lib;
109 auto itr = m_dat.
find( key );
111 if ( itr != m_dat.end() ) {
112 itr->second.count += 1;
115 const string rlib = lib.substr( lib.rfind(
"/" ) + 1 );
131 os <<
"Num | Function | Source Library" <<
endl;
132 os <<
"----+--------------------------------+-------------------" 133 <<
"-----------------------" <<
endl;
135 for (
const auto& itr : m_dat ) {
136 const auto& dat = itr.second;
139 os.
setf( ios_base::right, ios_base::adjustfield );
144 os.
setf( ios_base::left, ios_base::adjustfield );
148 os.
setf( ios_base::left, ios_base::adjustfield );
162 if ( itr !=
std::end( m_dat ) ) m_dat.erase( itr );
170 if ( itr !=
std::end( m_dat ) ) m_dat.erase( itr );
177 auto loc = str.
find(
"=" );
178 if ( loc == std::string::npos ) {
182 string key = str.
substr( 0, loc );
183 string val = str.
substr( loc + 1 );
187 if ( key ==
"FCN" || key ==
"FNC" ) {
190 }
else if ( key ==
"LIB" ) {
197 warning() <<
"ignoring unknown token in Filter: " << str <<
endmsg;
StatusCode initialize() override
StatusCode reinitialize() override
constexpr static const auto SUCCESS
void parseFilter(const std::string &str, std::string &fnc, std::string &lib)
#define DECLARE_COMPONENT(type)
StatusCode initialize() override
This class is used for returning status codes from appropriate routines.
void regFnc(const std::string &func, const std::string &lib) override
void filterLib(const std::string &)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
void filterFnc(const std::string &)
void list() const override
StatusCode finalize() override