📄 weakmap.inl
字号:
/* * =========================================================================== * PRODUCTION $Log: weakmap.inl,v $ * PRODUCTION Revision 1000.0 2003/10/29 15:33:24 gouriano * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.7 * PRODUCTION * =========================================================================== */#if defined(WEAKMAP__HPP) && !defined(WEAKMAP__INL)#define WEAKMAP__INL/* $Id: weakmap.inl,v 1000.0 2003/10/29 15:33:24 gouriano Exp $* ===========================================================================** PUBLIC DOMAIN NOTICE* National Center for Biotechnology Information** This software/database is a "United States Government Work" under the* terms of the United States Copyright Act. It was written as part of* the author's official duties as a United States Government employee and* thus cannot be copyrighted. This software/database is freely available* to the public for use. The National Library of Medicine and the U.S.* Government have not placed any restriction on its use or reproduction.** Although all reasonable efforts have been taken to ensure the accuracy* and reliability of the software and data, the NLM and the U.S.* Government do not and cannot warrant the performance or results that* may be obtained by using this software or data. The NLM and the U.S.* Government disclaim all warranties, express or implied, including* warranties of performance, merchantability or fitness for any particular* purpose.** Please cite the author in any work or product based on this material.** ===========================================================================** Author: Eugene Vasilchenko** File Description:* Inline methods for classes defined in weakmap.hpp** ---------------------------------------------------------------------------* $Log: weakmap.inl,v $* Revision 1000.0 2003/10/29 15:33:24 gouriano* PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.7** Revision 1.7 2001/05/17 15:01:19 lavr* Typos corrected** Revision 1.6 2001/01/05 20:08:54 vasilche* Added util directory for various algorithms and utility classes.** Revision 1.5 2000/12/26 22:23:46 vasilche* Fixed errors of compilation on Mac.** Revision 1.4 2000/10/20 15:51:28 vasilche* Fixed data error processing.* Added interface for constructing container objects directly into output stream.* object.hpp, object.inl and object.cpp were split to* objectinfo.*, objecttype.*, objectiter.* and objectio.*.** Revision 1.3 2000/10/13 16:28:34 vasilche* Reduced header dependency.* Avoid use of templates with virtual methods.* Reduced amount of different maps used.* All this lead to smaller compiled code size (libraries and programs).** Revision 1.2 2000/09/29 20:14:30 vasilche* Fixed name conflict (map).** Revision 1.1 2000/09/29 16:18:16 vasilche* Fixed binary format encoding/decoding on 64 bit compulers.* Implemented CWeakMap<> for automatic cleaning map entries.* Added cleaning local hooks via CWeakMap<>.* Renamed ReadTypeName -> ReadFileHeader, ENoTypeName -> ENoFileHeader.* Added some user interface methods to CObjectIStream, CObjectOStream and* CObjectStreamCopier.** ===========================================================================*/template<class Object>inlinevoid CWeakMapKey<Object>::Register(TWeakMap* m){ _ASSERT(m_Maps.find(m) == m_Maps.end()); m_Maps.insert(m);}template<class Object>inlinevoid CWeakMapKey<Object>::Deregister(TWeakMap* m){ _ASSERT(m_Maps.find(m) != m_Maps.end()); m_Maps.erase(m);}template<class Object>inlinesize_t CWeakMap<Object>::size(void) const{ return m_Map.size();}template<class Object>inlinebool CWeakMap<Object>::empty(void) const{ return m_Map.empty();}template<class Object>inlineCWeakMap<Object>::CWeakMap(void){}template<class Object>inlineCWeakMap<Object>::~CWeakMap(void){ while ( !empty() ) { erase(*(m_Map.begin()->first)); }}template<class Object>inlinevoid CWeakMap<Object>::insert(key_type& key, const mapped_type& object){ pair<TMap::iterator, bool> insert = m_Map.insert(TMap::value_type(&key, object)); if ( insert.second ) { key.Register(this); } else { insert.first->second = object; }}template<class Object>inlinevoid CWeakMap<Object>::erase(key_type& key){ TMap::iterator mi = m_Map.find(&key); if ( mi != m_Map.end() ) { m_Map.erase(mi); key.Deregister(this); }}template<class Object>inlinevoid CWeakMap<Object>::Forget(key_type& key){ _ASSERT(m_Map.find(&key) != m_Map.end()); m_Map.erase(&key); key.Deregister(this);}template<class Object>inlinetypename CWeakMap<Object>::const_iteratorCWeakMap<Object>::find(key_type& key) const{ return m_Map.find(&key);}template<class Object>inlinetypename CWeakMap<Object>::iteratorCWeakMap<Object>::find(key_type& key){ return m_Map.find(&key);}template<class Object>inlinetypename CWeakMap<Object>::const_iteratorCWeakMap<Object>::begin(void) const{ return m_Map.begin();}template<class Object>inlinetypename CWeakMap<Object>::iteratorCWeakMap<Object>::begin(void){ return m_Map.begin();}template<class Object>inlinetypename CWeakMap<Object>::const_iteratorCWeakMap<Object>::end(void) const{ return m_Map.end();}template<class Object>inlinetypename CWeakMap<Object>::iteratorCWeakMap<Object>::end(void){ return m_Map.end();}template<class Object>inlineCWeakMapKey<Object>::CWeakMapKey(void){}template<class Object>inlineCWeakMapKey<Object>::~CWeakMapKey(void){ while ( !m_Maps.empty() ) { (*m_Maps.begin())->Forget(*this); }}#endif /* def WEAKMAP__HPP && ndef WEAKMAP__INL */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -