void getNames(_InsertIterator inserter) const
 {
     if (_instance == NULL) return;
     if (!_mutex) _mutex = new FastMutex();
     FastMutex::ScopedLock _(*_mutex);
     if (_instance == NULL) return;
     typename StringTypeMap::const_iterator iter = _instance->begin();
     for(; iter != _instance->end(); ++iter, ++inserter)
         inserter = iter->first;
 }
 void forEachValue(_Predicate predicate) const
 {
     if (_instance == NULL) return;
     if (!_mutex) _mutex = new FastMutex();
     FastMutex::ScopedLock _(*_mutex);
     if (_instance == NULL) return;
     typename StringTypeMap::const_iterator iter = _instance->begin();
     for(; iter != _instance->end(); ++iter)
         predicate(*(iter->second));
 }
inline Event::type_t
CommandMap::to_type_t (std::string tp)
{
	StringTypeMap::iterator result = _str_type_map.find(tp);

	if (result == _str_type_map.end()) {
		return Event::type_cmd_hit; // arbitrary
	}

	return (*result).second;
}
 _Type* find(std::string const& key) const
 {
     _Type * result = NULL;
     if (_instance == NULL) return result;
     if (!_mutex) _mutex = new FastMutex();
     FastMutex::ScopedLock _(*_mutex);
     if (_instance == NULL) return result;
     typename StringTypeMap::const_iterator iter= _instance->find(key);
     if (iter != _instance->end())
         result = iter->second;
     return result;
 }
 void insert(std::pair<std::string, _Type*>&& item)
 {
     createCache();
     if (!_mutex) _mutex = new FastMutex();
     FastMutex::ScopedLock _(*_mutex);
     _instance->insert(std::move(item));
 }
        void cleanCache(void)
        {
            if (_instance == NULL) return;
            if (!_mutex) _mutex = new FastMutex();
            FastMutex::ScopedLock _(*_mutex);
            if (_instance == NULL) return;
#if defined(_DEBUG) || defined(DEBUG)
            std::cout << "Clean instance map of " << _Name <<" - Number object: " << _instance->size() << std::endl;
#endif
            StringTypeMap * instance = _instance;
            _instance = NULL;
            typename StringTypeMap::iterator result = instance->begin();
            for(; result != instance->end(); ++result)
                delete result->second;
            instance->clear();
            delete instance;
        }
 void insert(std::string const& key, _Type* const& value)
 {
     createCache();
     std::pair<std::string, _Type*> item(key, value);
     if (!_mutex) _mutex = new FastMutex();
     FastMutex::ScopedLock _(*_mutex);
     _instance->insert(item);
 }
 void insert(std::string&& key, _Type*&& value)
 {
     createCache();
     std::pair<std::string, _Type*> item(std::move(key), std::move(value));
     value = NULL;
     if (!_mutex) _mutex = new FastMutex();
     FastMutex::ScopedLock _(*_mutex);
     _instance->insert(item);
 }
 void insert(_Type* const& value)
 {
     createCache();
     char buff[20] = { 0 };
     sprintf(buff, "%lx", (unsigned long)value);
     std::pair<std::string, _Type*> item(buff, value);
     if (!_mutex) _mutex = new FastMutex();
     FastMutex::ScopedLock _(*_mutex);
     _instance->insert(item);
 }