GrabBag/VrUtils/log4cpp/include/log4cpp/HierarchyMaintainer.hh
2025-07-23 01:35:14 +08:00

60 lines
1.9 KiB
C++

/*
* HierarchyMaintainer.hh
*
* Copyright 2000, LifeLine Networks BV (www.lifeline.nl). All rights reserved.
* Copyright 2000, Bastiaan Bakker. All rights reserved.
*
* See the COPYING file for the terms of usage and distribution.
*/
#ifndef _LOG4CPP_HIERARCHYMAINTAINER_HH
#define _LOG4CPP_HIERARCHYMAINTAINER_HH
#include <log4cpp/Portability.hh>
#include <string>
#include <map>
#include <vector>
#include <log4cpp/Category.hh>
#include <log4cpp/threading/Threading.hh>
namespace log4cpp {
/**
* HierarchyMaintainer is an internal log4cpp class. It is responsible
* for maintaining the hierarchy of Categories. Applications should
* not have to use this class directly.
**/
class HierarchyMaintainer {
friend class Log4cppCleanup;
public:
typedef std::map<std::string, Category*> CategoryMap;
typedef void (*shutdown_fun_ptr)();
static HierarchyMaintainer& getDefaultMaintainer();
HierarchyMaintainer();
virtual ~HierarchyMaintainer();
virtual Category* getExistingInstance(const std::string& name);
virtual Category& getInstance(const std::string& name);
virtual std::vector<Category*>* getCurrentCategories() const;
virtual void shutdown();
void register_shutdown_handler(shutdown_fun_ptr handler);
virtual void deleteAllCategories();
protected:
virtual Category* _getExistingInstance(const std::string& name);
virtual Category& _getInstance(const std::string& name);
CategoryMap _categoryMap;
mutable threading::Mutex _categoryMutex;
private:
typedef std::vector<shutdown_fun_ptr> handlers_t;
static HierarchyMaintainer* _defaultMaintainer;
handlers_t handlers_;
};
}
#endif // _LOG4CPP_HIERARCHYMAINTAINER_HH