⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iterator.hpp

📁 ncbi源码
💻 HPP
📖 第 1 页 / 共 2 页
字号:
        {        }    CTypesIteratorBase(const TTypeList& typeList, const TBeginInfo& beginInfo)        : m_TypeList(typeList)        {            Init(beginInfo);        }    const TTypeList& GetTypeList(void) const        {            return m_TypeList;        }    CTypesIteratorBase<Parent>& AddType(TTypeInfo type)        {            m_TypeList.push_back(type);            return *this;        }    CTypesIteratorBase<Parent>& operator=(const TBeginInfo& beginInfo)        {            Init(beginInfo);            return *this;        }    typename CParent::TObjectInfo::TObjectPtrType GetFoundPtr(void) const        {            return this->Get().GetObjectPtr();        }    TTypeInfo GetFoundType(void) const        {            return this->Get().GetTypeInfo();        }    TTypeInfo GetMatchType(void) const        {            return m_MatchType;        }protected:#if 0// There is an (unconfirmed) opinion that putting these two functions// into source (iterator.cpp) reduces the size of an executable.// Still, keeping them there is reported as bug by// Metrowerks Codewarrior 9.0 (Mac OSX)    virtual bool CanSelect(const CConstObjectInfo& object);    virtual bool CanEnter(const CConstObjectInfo& object);#else    virtual bool CanSelect(const CConstObjectInfo& object)    {        if ( !CParent::CanSelect(object) )            return false;        m_MatchType = 0;        TTypeInfo type = object.GetTypeInfo();        ITERATE ( TTypeList, i, GetTypeList() ) {            if ( type->IsType(*i) ) {                m_MatchType = *i;                return true;            }        }        return false;    }    virtual bool CanEnter(const CConstObjectInfo& object)    {        if ( !CParent::CanEnter(object) )            return false;        TTypeInfo type = object.GetTypeInfo();        ITERATE ( TTypeList, i, GetTypeList() ) {            if ( type->MayContainType(*i) )                return true;        }        return false;    }#endifprivate:    TTypeList m_TypeList;    TTypeInfo m_MatchType;};// template class for iteration on objects of class Ctemplate<class C, class TypeGetter = C>class CTypeIterator : public CTypeIteratorBase<CTreeIterator>{    typedef CTypeIteratorBase<CTreeIterator> CParent;public:    typedef typename CParent::TBeginInfo TBeginInfo;    CTypeIterator(void)        : CParent(TypeGetter::GetTypeInfo())        {        }    CTypeIterator(const TBeginInfo& beginInfo)        : CParent(TypeGetter::GetTypeInfo(), beginInfo)        {        }    explicit CTypeIterator(CSerialObject& object)        : CParent(TypeGetter::GetTypeInfo(), TBeginInfo(object))        {        }    CTypeIterator<C, TypeGetter>& operator=(const TBeginInfo& beginInfo)        {            Init(beginInfo);            return *this;        }    C& operator*(void)        {            return *CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }    const C& operator*(void) const        {            return *CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }    C* operator->(void)        {            return CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }    const C* operator->(void) const        {            return CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }};// template class for iteration on objects of class C (non-medifiable version)template<class C, class TypeGetter = C>class CTypeConstIterator : public CTypeIteratorBase<CTreeConstIterator>{    typedef CTypeIteratorBase<CTreeConstIterator> CParent;public:    typedef typename CParent::TBeginInfo TBeginInfo;    CTypeConstIterator(void)        : CParent(TypeGetter::GetTypeInfo())        {        }    CTypeConstIterator(const TBeginInfo& beginInfo)        : CParent(TypeGetter::GetTypeInfo(), beginInfo)        {        }    explicit CTypeConstIterator(const CSerialObject& object)        : CParent(TypeGetter::GetTypeInfo(), TBeginInfo(object))        {        }    CTypeConstIterator<C, TypeGetter>& operator=(const TBeginInfo& beginInfo)        {            Init(beginInfo);            return *this;        }    const C& operator*(void) const        {            return *CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }    const C* operator->(void) const        {            return CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }};// template class for iteration on objects of class Ctemplate<class C>class CLeafTypeIterator : public CLeafTypeIteratorBase<CTreeIterator>{    typedef CLeafTypeIteratorBase<CTreeIterator> CParent;public:    typedef typename CParent::TBeginInfo TBeginInfo;    CLeafTypeIterator(void)        : CParent(C::GetTypeInfo())        {        }    CLeafTypeIterator(const TBeginInfo& beginInfo)        : CParent(C::GetTypeInfo(), beginInfo)        {        }    explicit CLeafTypeIterator(CSerialObject& object)        : CParent(C::GetTypeInfo(), TBeginInfo(object))        {        }    CLeafTypeIterator<C>& operator=(const TBeginInfo& beginInfo)        {            Init(beginInfo);            return *this;        }    C& operator*(void)        {            return *CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }    const C& operator*(void) const        {            return *CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }    C* operator->(void)        {            return CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }    const C* operator->(void) const        {            return CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }};// template class for iteration on objects of class C (non-medifiable version)template<class C>class CLeafTypeConstIterator : public CLeafTypeIteratorBase<CTreeConstIterator>{    typedef CLeafTypeIteratorBase<CTreeConstIterator> CParent;public:    typedef typename CParent::TBeginInfo TBeginInfo;    CLeafTypeConstIterator(void)        : CParent(C::GetTypeInfo())        {        }    CLeafTypeConstIterator(const TBeginInfo& beginInfo)        : CParent(C::GetTypeInfo(), beginInfo)        {        }    explicit CLeafTypeConstIterator(const CSerialObject& object)        : CParent(C::GetTypeInfo(), TBeginInfo(object))        {        }    CLeafTypeConstIterator<C>& operator=(const TBeginInfo& beginInfo)        {            Init(beginInfo);            return *this;        }    const C& operator*(void) const        {            return *CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }    const C* operator->(void) const        {            return CTypeConverter<C>::SafeCast(Get().GetObjectPtr());        }};// template class for iteration on objects of standard C++ type Ttemplate<typename T>class CStdTypeIterator : public CTypeIterator<T, CStdTypeInfo<T> >{    typedef CTypeIterator<T, CStdTypeInfo<T> > CParent;public:    typedef typename CParent::TBeginInfo TBeginInfo;    CStdTypeIterator(void)        {        }    CStdTypeIterator(const TBeginInfo& beginInfo)        : CParent(beginInfo)        {        }    explicit CStdTypeIterator(CSerialObject& object)        : CParent(object)        {        }    CStdTypeIterator<T>& operator=(const TBeginInfo& beginInfo)        {            Init(beginInfo);            return *this;        }};// template class for iteration on objects of standard C++ type T// (non-modifiable version)template<typename T>class CStdTypeConstIterator : public CTypeConstIterator<T, CStdTypeInfo<T> >{    typedef CTypeConstIterator<T, CStdTypeInfo<T> > CParent;public:    typedef typename CParent::TBeginInfo TBeginInfo;    CStdTypeConstIterator(void)        {        }    CStdTypeConstIterator(const TBeginInfo& beginInfo)        : CParent(beginInfo)        {        }    explicit CStdTypeConstIterator(const CSerialObject& object)        : CParent(object)        {        }    CStdTypeConstIterator<T>& operator=(const TBeginInfo& beginInfo)        {            Init(beginInfo);            return *this;        }};// get special typeinfo of CObjectclass NCBI_XSERIAL_EXPORT CObjectGetTypeInfo{public:    static TTypeInfo GetTypeInfo(void);};// class for iteration on objects derived from class CObjecttypedef CTypeIterator<CObject, CObjectGetTypeInfo> CObjectIterator;// class for iteration on objects derived from class CObject// (non-modifiable version)typedef CTypeConstIterator<CObject, CObjectGetTypeInfo> CObjectConstIterator;// class for iteration on objects of list of typestypedef CTypesIteratorBase<CTreeIterator> CTypesIterator;// class for iteration on objects of list of types (non-modifiable version)typedef CTypesIteratorBase<CTreeConstIterator> CTypesConstIterator;// enum flag for turning on loop detection in object hierarchyenum EDetectLoops {    eDetectLoops};// get starting point of object hierarchytemplate<class C>inlineCBeginInfo Begin(C& obj){    return CBeginInfo(&obj, C::GetTypeInfo(), false);}// get starting point of non-modifiable object hierarchytemplate<class C>inlineCConstBeginInfo ConstBegin(const C& obj){    return CConstBeginInfo(&obj, C::GetTypeInfo(), false);}template<class C>inlineCConstBeginInfo Begin(const C& obj){    return CConstBeginInfo(&obj, C::GetTypeInfo(), false);}// get starting point of object hierarchy with loop detectiontemplate<class C>inlineCBeginInfo Begin(C& obj, EDetectLoops){    return CBeginInfo(&obj, C::GetTypeInfo(), true);}// get starting point of non-modifiable object hierarchy with loop detectiontemplate<class C>inlineCConstBeginInfo ConstBegin(const C& obj, EDetectLoops){    return CConstBeginInfo(&obj, C::GetTypeInfo(), true);}template<class C>inlineCConstBeginInfo Begin(const C& obj, EDetectLoops){    return CConstBeginInfo(&obj, C::GetTypeInfo(), true);}/* @} *///#include <serial/iterator.inl>END_NCBI_SCOPE#endif  /* ITERATOR__HPP *//* * ---------------------------------------------------------------------------* $Log: iterator.hpp,v $* Revision 1000.1  2004/06/01 19:38:38  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.30** Revision 1.30  2004/04/26 16:40:59  ucko* Tweak for GCC 3.4 compatibility.** Revision 1.29  2003/09/30 17:12:30  gouriano* Modified TypeIterators to skip unset optional members** Revision 1.28  2003/09/15 20:01:15  gouriano* fixed the definition of CTypesIteratorBase to eliminate compilation warnings** Revision 1.27  2003/04/15 14:15:21  siyan* Added doxygen support** Revision 1.26  2003/03/26 16:13:32  vasilche* Removed TAB symbols. Some formatting.** Revision 1.25  2003/03/10 18:52:37  gouriano* use new structured exceptions (based on CException)** Revision 1.24  2003/02/04 16:05:48  dicuccio* Header file clean-up - removed redundant includes** Revision 1.23  2002/12/23 19:02:30  dicuccio* Moved template function bodies from .cpp -> .hpp to make MSVC happy.  Added an* #ifdef'd wrapper to unimplemented protected ctors - MSVC doesn't like these.* Log to end** Revision 1.21  2002/06/13 15:15:19  ucko* Add [explicit] CSerialObject-based constructors, which should get rid* of the need for [Const]Begin() in the majority of cases.** Revision 1.20  2001/05/17 14:56:45  lavr* Typos corrected** Revision 1.19  2000/11/09 15:21:25  vasilche* Fixed bugs in iterators.* Added iterator constructors from CObjectInfo.* Added CLeafTypeIterator.** Revision 1.18  2000/11/08 19:24:17  vasilche* Added CLeafTypeIterator<Type> and CLeafTypeConstIterator<Type>.** Revision 1.17  2000/10/20 15:51:23  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.16  2000/10/03 17:22:32  vasilche* Reduced header dependency.* Reduced size of debug libraries on WorkShop by 3 times.* Fixed tag allocation for parent classes.* Fixed CObject allocation/deallocation in streams.* Moved instantiation of several templates in separate source file.** Revision 1.15  2000/09/19 20:16:52  vasilche* Fixed type in CStlClassInfo_auto_ptr.* Added missing include serialutil.hpp.** Revision 1.14  2000/09/18 20:00:02  vasilche* Separated CVariantInfo and CMemberInfo.* Implemented copy hooks.* All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.* Most type specific functions now are implemented via function pointers instead of virtual functions.** Revision 1.13  2000/07/03 18:42:33  vasilche* Added interface to typeinfo via CObjectInfo and CConstObjectInfo.* Reduced header dependency.** Revision 1.12  2000/06/07 19:45:42  vasilche* Some code cleaning.* Macros renaming in more clear way.* BEGIN_NAMED_*_INFO, ADD_*_MEMBER, ADD_NAMED_*_MEMBER.** Revision 1.11  2000/06/01 19:06:55  vasilche* Added parsing of XML data.** Revision 1.10  2000/05/24 20:08:12  vasilche* Implemented XML dump.** Revision 1.9  2000/05/09 16:38:32  vasilche* CObject::GetTypeInfo now moved to CObjectGetTypeInfo::GetTypeInfo to reduce possible errors.* Added write context to CObjectOStream.* Inlined most of methods of helping class Member, Block, ByteBlock etc.** Revision 1.8  2000/05/05 17:59:02  vasilche* Unfortunately MSVC doesn't support explicit instantiation of template methods.** Revision 1.7  2000/05/05 16:26:51  vasilche* Simplified iterator templates.** Revision 1.6  2000/05/05 13:08:16  vasilche* Simplified CTypesIterator interface.** Revision 1.5  2000/05/04 16:23:09  vasilche* Updated CTypesIterator and CTypesConstInterator interface.** Revision 1.4  2000/04/10 21:01:38  vasilche* Fixed Erase for map/set.* Added iteratorbase.hpp header for basic internal classes.** Revision 1.3  2000/03/29 18:02:39  vasilche* Workaround of bug in MSVC: abstract member in template.** Revision 1.2  2000/03/29 17:22:34  vasilche* Fixed ambiguity in Begin() template function.** Revision 1.1  2000/03/29 15:55:19  vasilche* Added two versions of object info - CObjectInfo and CConstObjectInfo.* Added generic iterators by class -* 	CTypeIterator<class>, CTypeConstIterator<class>,* 	CStdTypeIterator<type>, CStdTypeConstIterator<type>,* 	CObjectsIterator and CObjectsConstIterator.** ===========================================================================*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -