bool SIteratorFunctions::s_ContainsType(const CConstObjectInfo& object, TTypeInfo needType) { if ( object.GetTypeInfo()->IsType(needType) ) return true; switch ( object.GetTypeFamily() ) { case eTypeFamilyClass: for ( CConstObjectInfo::CMemberIterator m(object); m; ++m ) { if ( m.GetMemberInfo()->GetTypeInfo()->MayContainType(needType) && s_ContainsType(*m, needType) ) return true; } return false; case eTypeFamilyChoice: { CConstObjectInfo::CChoiceVariant v = object.GetCurrentChoiceVariant(); return v && v.GetVariantInfo()->GetTypeInfo()->MayContainType(needType) && s_ContainsType(*v, needType); } case eTypeFamilyPointer: return s_ContainsType(object.GetPointedObject(), needType); case eTypeFamilyContainer: for ( CConstObjectInfo::CElementIterator e(object); e; ++e ) { if ( s_ContainsType(*e, needType) ) return true; } return false; default: return false; } }
void CObjectOStream::Write(const CConstObjectInfo& object) { // root writer BEGIN_OBJECT_FRAME2(eFrameNamed, object.GetTypeInfo()); WriteFileHeader(object.GetTypeInfo()); WriteObject(object); EndOfWrite(); END_OBJECT_FRAME(); if ( GetAutoSeparator() ) Separator(*this); }
void CObjectOStream::WriteContainerElement(const CConstObjectInfo& element) { BeginContainerElement(element.GetTypeInfo()); WriteObject(element); EndContainerElement(); }
bool CTypesIteratorBase<Parent>::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; }
bool CTypesIteratorBase<Parent>::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; }
bool CConstTreeLevelIterator::HaveChildren(const CConstObjectInfo& object) { if ( !object ) return false; switch ( object.GetTypeFamily() ) { case eTypeFamilyClass: case eTypeFamilyChoice: case eTypeFamilyPointer: case eTypeFamilyContainer: return true; default: return false; } }
void CObjectOStream::WriteObject(const CConstObjectInfo& object) { WriteObject(object.GetObjectPtr(), object.GetTypeInfo()); }
void CWriteChoiceVariantHook::CustomWrite(CObjectOStream& out, const CConstObjectInfoCV& variant, const CConstObjectInfo& custom_object) { out.WriteExternalObject(custom_object.GetObjectPtr(), variant.GetVariantInfo()->GetTypeInfo()); }
void CWriteClassMemberHook::CustomWrite(CObjectOStream& out, const CConstObjectInfoMI& member, const CConstObjectInfo& custom_object) { const CMemberInfo* memberInfo = member.GetMemberInfo(); out.WriteClassMember(memberInfo->GetId(), memberInfo->GetTypeInfo(), custom_object.GetObjectPtr()); }
void CWriteObjectHook::DefaultWrite(CObjectOStream& out, const CConstObjectInfo& object) { object.GetTypeInfo()->DefaultWriteData(out, object.GetObjectPtr()); }