X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fdebug.cc;h=25ebb64850e58771a0aa3101114871c903495e71;hb=289078f7f8224ec72fb23d81b0e2b53a09611cfa;hp=0a2c1b0d72d85c021d7a85ab0ccc28e61a3dfb05;hpb=9b975dce3872e03226fc427e67d5abb578e9a92b;p=ardour.git diff --git a/libs/pbd/debug.cc b/libs/pbd/debug.cc index 0a2c1b0d72..25ebb64850 100644 --- a/libs/pbd/debug.cc +++ b/libs/pbd/debug.cc @@ -24,28 +24,44 @@ #include #include +#include + #include "pbd/debug.h" #include "i18n.h" using namespace std; -static uint64_t _debug_bit = 1; -static std::map _debug_bit_map; +using PBD::DebugBits; + +static uint64_t _debug_bit = 0; + +typedef std::map DebugMap; -uint64_t PBD::DEBUG::Stateful = PBD::new_debug_bit ("stateful"); -uint64_t PBD::DEBUG::Properties = PBD::new_debug_bit ("properties"); -uint64_t PBD::DEBUG::FileManager = PBD::new_debug_bit ("filemanager"); -uint64_t PBD::DEBUG::Pool = PBD::new_debug_bit ("pool"); +namespace PBD { + DebugMap & _debug_bit_map() + { + static DebugMap map; + return map; + } +} -uint64_t PBD::debug_bits = 0x0; +DebugBits PBD::DEBUG::Stateful = PBD::new_debug_bit ("stateful"); +DebugBits PBD::DEBUG::Properties = PBD::new_debug_bit ("properties"); +DebugBits PBD::DEBUG::FileManager = PBD::new_debug_bit ("filemanager"); +DebugBits PBD::DEBUG::Pool = PBD::new_debug_bit ("pool"); +DebugBits PBD::DEBUG::EventLoop = PBD::new_debug_bit ("eventloop"); +DebugBits PBD::DEBUG::AbstractUI = PBD::new_debug_bit ("abstractui"); +DebugBits PBD::DEBUG::FileUtils = PBD::new_debug_bit ("fileutils"); +DebugBits PBD::DEBUG::Configuration = PBD::new_debug_bit ("configuration"); -uint64_t +DebugBits PBD::debug_bits; + +DebugBits PBD::new_debug_bit (const char* name) { - uint64_t ret; - _debug_bit_map.insert (make_pair (name, _debug_bit)); - ret = _debug_bit; - _debug_bit <<= 1; + DebugBits ret; + ret.set (_debug_bit++, 1); + _debug_bit_map().insert (make_pair (name, ret)); return ret; } @@ -55,46 +71,38 @@ PBD::debug_print (const char* prefix, string str) cerr << prefix << ": " << str; } -void -PBD::set_debug_bits (uint64_t bits) -{ - debug_bits = bits; -} - int PBD::parse_debug_options (const char* str) { - char* p; - char* sp; - uint64_t bits = 0; - char* copy = strdup (str); - - p = strtok_r (copy, ",", &sp); - - while (p) { - if (strcasecmp (p, "list") == 0) { + string in_str = str; + typedef boost::tokenizer > tokenizer; + boost::char_separator sep (","); + tokenizer tokens (in_str, sep); + DebugBits bits; + + for (tokenizer::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter) { + if (*tok_iter == "list") { list_debug_options (); - free (copy); return 1; } - if (strcasecmp (p, "all") == 0) { - PBD::set_debug_bits (~0ULL); - free (copy); + if (*tok_iter == "all") { + debug_bits.set (); /* sets all bits */ return 0; } - for (map::iterator i = _debug_bit_map.begin(); i != _debug_bit_map.end(); ++i) { - if (strncasecmp (p, i->first, strlen (p)) == 0) { - bits |= i->second; + for (map::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) { + const char* cstr = (*tok_iter).c_str(); + + if (strncasecmp (cstr, i->first, strlen (cstr)) == 0) { + bits |= i->second; + cerr << i->first << " set ... debug bits now set to " << bits << " using " << i->second << endl; } } - - p = strtok_r (0, ",", &sp); } - free (copy); - PBD::set_debug_bits (bits); + debug_bits = bits; + return 0; } @@ -106,7 +114,7 @@ PBD::list_debug_options () vector options; - for (map::iterator i = _debug_bit_map.begin(); i != _debug_bit_map.end(); ++i) { + for (map::iterator i = _debug_bit_map().begin(); i != _debug_bit_map().end(); ++i) { options.push_back (i->first); }