59 typedef pair<TObjectPtr, TTypeInfo>
CParent;
64 bool detectLoops =
false)
69 bool detectLoops =
false)
70 :
CParent(object.GetObjectPtr(), object.GetTypeInfo()),
75 :
CParent(&object, object.GetThisTypeInfo()),
87 typedef pair<TConstObjectPtr, TTypeInfo>
CParent;
92 bool detectLoops =
false)
97 bool detectLoops =
false)
98 :
CParent(object.GetObjectPtr(), object.GetTypeInfo()),
103 bool detectLoops =
false)
104 :
CParent(&object, object.GetThisTypeInfo()),
172 virtual void Erase(
void);
179 template<
class LevelIterator>
189 typedef list< pair< typename LevelIterator::TObjectInfo, const CItemInfo*> >
TIteratorContext;
201 Init(beginInfo, filter);
223 return Get().GetTypeInfo();
278 typename vector< TStackLevel >::const_iterator
i;
280 stk_info.push_back( make_pair( (*i)->Get(), (*i)->GetItemInfo()));
290 typename TIteratorContext::const_iterator
i;
291 for (
i = stk_info.begin();
i != stk_info.end(); ++
i) {
321 if (filter.empty()) {
355 ind =
m_Stack.back().get()->GetIndex();
372 if ( visitedObjects ) {
389 if ( !beginInfo.first || !beginInfo.second )
391 if ( beginInfo.m_DetectLoops )
407 TStackLevel nextLevel(LevelIterator::Create(current));
408 if ( nextLevel && nextLevel->Valid() ) {
417 if (
m_Stack.back()->Valid() ) {
431 while (!
m_Stack.back()->CanGet()) {
443 current =
m_Stack.back()->Get();
450 }
while (
Step(current) );
466 for (
const auto& e : it.
m_Stack) {
496 Init(beginInfo, filter);
512 template<
class Parent>
526 this->
Init(beginInfo);
529 const string& filter)
532 this->
Init(beginInfo, filter);
537 return CParent::CanSelect(
object) &&
542 return CParent::CanEnter(
object) &&
543 object.GetTypeInfo()->MayContainType(
m_NeedType);
563 template<
class Parent>
593 const string& filter)
596 Init(beginInfo, filter);
612 this->
Init(beginInfo);
616 typename CParent::TObjectInfo::TObjectPtrType
GetFoundPtr(
void)
const
618 return this->
Get().GetObjectPtr();
622 return this->
Get().GetTypeInfo();
640 if ( !CParent::CanSelect(
object) )
645 if (
type->IsType(*
i) ) {
654 if ( !CParent::CanEnter(
object) )
658 if (
type->MayContainType(*
i) )
671 template<
class C,
class TypeGetter = C>
684 :
CParent(TypeGetter::GetTypeInfo())
688 :
CParent(TypeGetter::GetTypeInfo(), beginInfo)
692 :
CParent(TypeGetter::GetTypeInfo(), beginInfo, filter)
723 :
CParent(TypeGetter::GetTypeInfo())
765 template<
class C,
class TypeGetter = C>
778 :
CParent(TypeGetter::GetTypeInfo())
782 :
CParent(TypeGetter::GetTypeInfo(), beginInfo)
786 :
CParent(TypeGetter::GetTypeInfo(), beginInfo, filter)
809 :
CParent(TypeGetter::GetTypeInfo())
828 CParent::operator++();
834 CParent::operator++();
839 if (
IsValid() && it.IsValid()) {
840 return Get() == it.Get();
842 return IsValid() == it.IsValid();
854 template<
class Parent>
859 typedef typename CParent::TBeginInfo
TBeginInfo;
861 CLeafTypeIteratorBase(
TTypeInfo needType)
865 CLeafTypeIteratorBase(
TTypeInfo needType,
const TBeginInfo& beginInfo)
870 CLeafTypeIteratorBase(
TTypeInfo needType,
const TBeginInfo& beginInfo,
871 const string& filter)
874 Init(beginInfo, filter);
882 class CLeafTypeIterator :
public CLeafTypeIteratorBase<CTreeIterator>
884 typedef CLeafTypeIteratorBase<CTreeIterator> CParent;
886 typedef typename CParent::TBeginInfo TBeginInfo;
888 CLeafTypeIterator(
void)
889 : CParent(
C::GetTypeInfo())
892 CLeafTypeIterator(
const TBeginInfo& beginInfo)
893 : CParent(
C::GetTypeInfo(), beginInfo)
896 CLeafTypeIterator(
const TBeginInfo& beginInfo,
const string& filter)
897 : CParent(
C::GetTypeInfo(), beginInfo, filter)
901 : CParent(
C::GetTypeInfo(), TBeginInfo(object))
905 CLeafTypeIterator<C>& operator=(
const TBeginInfo& beginInfo)
923 const C* operator->(
void)
const
931 class CLeafTypeConstIterator :
public CLeafTypeIteratorBase<CTreeConstIterator>
933 typedef CLeafTypeIteratorBase<CTreeConstIterator> CParent;
935 typedef typename CParent::TBeginInfo TBeginInfo;
937 CLeafTypeConstIterator(
void)
938 : CParent(
C::GetTypeInfo())
941 CLeafTypeConstIterator(
const TBeginInfo& beginInfo)
942 : CParent(
C::GetTypeInfo(), beginInfo)
945 CLeafTypeConstIterator(
const TBeginInfo& beginInfo,
const string& filter)
946 : CParent(
C::GetTypeInfo(), beginInfo, filter)
950 : CParent(
C::GetTypeInfo(), TBeginInfo(object))
954 CLeafTypeConstIterator<C>& operator=(
const TBeginInfo& beginInfo)
964 const C* operator->(
void)
const
1006 return CBeginInfo(&obj, C::GetTypeInfo(),
false);
1029 return CBeginInfo(&obj, C::GetTypeInfo(),
true);
Class holding information about root of non-modifiable object hierarchy Do not use it directly.
Class holding information about root of non-modifiable object hierarchy Do not use it directly.
Class describing stack level of traversal.
Base class for all serializable objects.
Base class for all iterators over non-modifiable object Do not use it directly.
Base class for all iterators over modifiable object.
Template class for iteration on objects of class C (non-medifiable version)
CTypeInfo class contains all information about C++ types (both basic and classes): members and layout...
template base class for CTypeIterator<> and CTypeConstIterator<> Do not use it directly
Template class for iteration on objects of class C.
Template base class for CTypesIterator and CTypesConstIterator Do not use it directly.
iterator_bool insert(const value_type &val)
Include a standard set of the NCBI C++ Toolkit most basic headers.
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
const CMemberId & GetId(void) const
bool IsAttlist(void) const
const string & GetName(void) const
bool HasNotag(void) const
CVect2< NCBI_PROMOTE(int,U) > operator*(int v1, const CVect2< U > &v2)
size_t TMemberIndex
Type used for indexing class members and choice variants.
const TMemberIndex kInvalidMember
Special value returned from FindMember.
const void * TConstObjectPtr
static const TObjectType * SafeCast(TTypeInfo type)
CTypesIteratorBase(const TTypeList &typeList)
CTreeIteratorTmpl< CTreeLevelIterator > CParent
TIteratorContext GetContextData(void) const
Get raw context data.
virtual const CItemInfo * GetItemInfo(void) const =0
CTypeIterator(const TBeginInfo &beginInfo)
CTypeIteratorBase(TTypeInfo needType, const TBeginInfo &beginInfo)
virtual CConstTreeLevelIterator * Clone(void)=0
virtual void Next(void)=0
void Assign(const CTreeIteratorTmpl &it)
CTypeIterator< C, TypeGetter > & operator=(const TBeginInfo &beginInfo)
CTreeIteratorTmpl(const TBeginInfo &beginInfo)
const C * operator->(void) const
bool operator!=(const CTypeIterator &it) const
CBeginInfo(CSerialObject &object, bool detectLoops=false)
CTreeIterator & operator=(const TBeginInfo &beginInfo)
pair< TConstObjectPtr, TTypeInfo > CParent
CParent::TObjectInfo::TObjectPtrType GetFoundPtr(void) const
CTypesIteratorBase(const TTypeList &typeList, const TBeginInfo &beginInfo)
virtual void SetItemInfo(const CItemInfo *info)=0
const TTypeList & GetTypeList(void) const
CTypeConstIterator operator++(int)
CParent::TBeginInfo TBeginInfo
virtual bool CanEnter(const CConstObjectInfo &object)
CBeginInfo(TObjectPtr objectPtr, TTypeInfo typeInfo, bool detectLoops=false)
virtual bool CanGet(void) const
CTypesIteratorBase(const TTypeList &typeList, const TBeginInfo &beginInfo, const string &filter)
CTypeConstIterator & begin(void)
const C & operator*(void) const
LevelIterator::TBeginInfo TBeginInfo
CTreeIterator(const TBeginInfo &beginInfo)
CConstBeginInfo(const CBeginInfo &beginInfo)
virtual void Next(void)=0
CTypeIterator(const CTypeIterator &it)
TTypeInfo GetMatchType(void) const
forward_iterator_tag iterator_category
CConstObjectInfo TObjectInfo
CConstBeginInfo(TConstObjectPtr objectPtr, TTypeInfo typeInfo, bool detectLoops=false)
CTypeIteratorBase< CTreeIterator > CParent
virtual bool CanGet(void) const
LevelIterator::TObjectInfo TObjectInfo
CTypeIterator & begin(void)
void Reset(void)
Reset iterator to initial state.
CTypeConstIterator< C, TypeGetter > & operator=(const TBeginInfo &beginInfo)
TObjectInfo & Get(void)
Get information about current object.
CTypesIteratorBase< CTreeIterator > CTypesIterator
virtual bool CanSelect(const CConstObjectInfo &obj)
string GetContext(void) const
Get context data as string.
CTreeIteratorTmpl< CConstTreeLevelIterator > CTreeConstIterator
virtual ~CTreeIteratorTmpl(void)
virtual void SetItemInfo(const CItemInfo *info)=0
virtual TMemberIndex GetIndex(void) const
virtual bool CanEnter(const CConstObjectInfo &object)
ptrdiff_t difference_type
TBeginInfo::TObjectInfo TObjectInfo
CTypesIteratorBase(TTypeInfo type1, TTypeInfo type2)
CTypeConstIterator(const CTypeConstIterator &it)
CTypeConstIterator end(void)
virtual bool Valid(void) const =0
pair< TObjectPtr, TTypeInfo > CParent
DECLARE_OPERATOR_BOOL(IsValid())
CTypeIteratorBase< CTreeConstIterator > CParent
void Assign(const CTypeIteratorBase &it)
shared_ptr< LevelIterator > TStackLevel
CTypeIteratorBase(TTypeInfo needType)
CParent::TBeginInfo TBeginInfo
CParent::TObjectInfo TObjectInfo
CParent::TBeginInfo TBeginInfo
int GetItemIndex(void) const
Return member index in sequence, or variant index in choice.
CTypeIterator(const TBeginInfo &beginInfo, const string &filter)
CTreeIteratorTmpl(const TBeginInfo &beginInfo, const string &filter)
forward_iterator_tag iterator_category
CTypeIterator(CSerialObject &object)
virtual TObjectInfo Get(void) const =0
CTypeIterator & operator=(const CTypeIterator &it)
TThis & operator++(void)
Go to next object.
bool Step(const TObjectInfo ¤t)
TTypeInfo GetCurrentTypeInfo(void) const
Get type information of current object.
CTypeConstIterator(const TBeginInfo &beginInfo, const string &filter)
const TObjectInfo & Get(void) const
Get information about current object.
CParent::TBeginInfo TBeginInfo
const C * operator->(void) const
bool operator==(const CTypeIterator &it) const
CConstBeginInfo(const CSerialObject &object, bool detectLoops=false)
CTypeConstIterator(const TBeginInfo &beginInfo)
CTypesIteratorBase< CTreeConstIterator > CTypesConstIterator
const C & operator*(void) const
TTypeInfo GetFoundType(void) const
CTypeConstIterator & operator=(const CTypeConstIterator &it)
list< TTypeInfo > TTypeList
CTreeIteratorTmpl< LevelIterator > TThis
CTypeConstIterator< CObject, CObjectGetTypeInfo > CObjectConstIterator
TThis & operator=(const TBeginInfo &beginInfo)
Initialize iterator to new root of object hierarchy.
CConstBeginInfo ConstBegin(const C &obj)
Get starting point of non-modifiable object hierarchy.
void Init(const TBeginInfo &beginInfo, const string &filter)
void Init(const TBeginInfo &beginInfo)
virtual TObjectInfo Get(void) const =0
CBeginInfo(const CObjectInfo &object, bool detectLoops=false)
virtual CTreeLevelIterator * Clone(void)=0
virtual bool CanEnter(const CConstObjectInfo &object)
virtual bool CanSelect(const CConstObjectInfo &object)
CConstBeginInfo TBeginInfo
CTypeIterator< CObject, CObjectGetTypeInfo > CObjectIterator
vector< TStackLevel > m_Stack
virtual bool Valid(void) const =0
shared_ptr< TVisitedObjects > m_VisitedObjects
bool operator!=(const CTypeConstIterator &it) const
static bool HaveChildren(const CConstObjectInfo &object)
CTypeIterator & operator++(void)
int GetContainerElementIndex(void) const
Return element index in STL container.
CBeginInfo Begin(C &obj)
Get starting point of object hierarchy.
bool CheckValid(void) const
CConstBeginInfo(const CConstObjectInfo &object, bool detectLoops=false)
CTypesIteratorBase< Parent > & operator=(const TBeginInfo &beginInfo)
void SetContextFilter(const string &filter)
Set context filter.
virtual bool CanSelect(const CConstObjectInfo &object)
set< TConstObjectPtr > TVisitedObjects
virtual TMemberIndex GetIndex(void) const
CTypesIteratorBase(TTypeInfo type)
virtual const CItemInfo * GetItemInfo(void) const =0
CTypeConstIterator & operator++(void)
CTypeConstIterator(const CSerialObject &object)
bool MatchesContext(const string &filter) const
Check context against filter.
CTypeIterator operator++(int)
list< pair< typename LevelIterator::TObjectInfo, const CItemInfo * > > TIteratorContext
CTypesIteratorBase< Parent > & AddType(TTypeInfo type)
TBeginInfo::TObjectInfo TObjectInfo
ptrdiff_t difference_type
bool operator==(const CTypeConstIterator &it) const
CTypeIteratorBase(TTypeInfo needType, const TBeginInfo &beginInfo, const string &filter)
CParent::TBeginInfo TBeginInfo
TObjectInfo m_CurrentObject
TTypeInfo GetIteratorType(void) const
CTreeIterator(const TBeginInfo &beginInfo, const string &filter)
static bool Match(const string &mask, const string &path)
TConstObjectPtr GetObjectPtr(void) const
Get pointer to object.
bool IsValid(const CSeq_point &pt, CScope *scope)
Checks that point >= 0 and point < length of Bioseq.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
const string & GetName(void) const
Get name of this type.
#define NCBI_XSERIAL_EXPORT
unsigned int
A callback function used to compare two keys in a database.
const TYPE & Get(const CNamedParameterList *param)
Useful/utility classes and methods.