From: James P. T. <jpt...@us...> - 2007-09-04 17:28:40
|
Update of /cvsroot/aaf/AAF/Utilities/AAFAnalyzer/BaseTestImpl In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv16639/BaseTestImpl Modified Files: ResolveRefVisitor.cpp ResolveRefVisitor.h Log Message: Resolve bug that caused files with multiple references to same mob to fail. The GetChildComponent() method in ResolveRefVisitor() was redundantly including the same slot component twice in cases where that component had already been referenced because it was picking up the record of the prior reference. Index: ResolveRefVisitor.h =================================================================== RCS file: /cvsroot/aaf/AAF/Utilities/AAFAnalyzer/BaseTestImpl/ResolveRefVisitor.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ResolveRefVisitor.h 21 Aug 2007 14:08:19 -0000 1.6 --- ResolveRefVisitor.h 4 Sep 2007 17:28:23 -0000 1.7 *************** *** 67,71 **** const aafSlotID_t slotId ); ! shared_ptr<vector<shared_ptr<Node> > > GetChildComponents( shared_ptr<Node> spMobSlotNode ); wostream& _os; --- 67,71 ---- const aafSlotID_t slotId ); ! shared_ptr<vector<shared_ptr<Node> > > GetContainedChildComponents( shared_ptr<Node> spMobSlotNode ); wostream& _os; Index: ResolveRefVisitor.cpp =================================================================== RCS file: /cvsroot/aaf/AAF/Utilities/AAFAnalyzer/BaseTestImpl/ResolveRefVisitor.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** ResolveRefVisitor.cpp 21 Aug 2007 14:08:19 -0000 1.8 --- ResolveRefVisitor.cpp 4 Sep 2007 17:28:23 -0000 1.9 *************** *** 52,55 **** --- 52,64 ---- #include <sstream> + // Set to 1 to activate debug code in this file. + // The debug code will show details of the objects that have been + // resolved. + #if 0 + #define RESOLVE_DEBUG( EXP ) EXP + #else + #define RESOLVE_DEBUG( EXP ) + #endif + namespace { *************** *** 70,75 **** ResolveRefVisitor::ResolveRefVisitor( wostream& os, ! shared_ptr<EdgeMap> spEdgeMap, ! shared_ptr<TestLevelTestResult> spTestLevelResult ) : _os(os), _spEdgeMap(spEdgeMap), --- 79,84 ---- ResolveRefVisitor::ResolveRefVisitor( wostream& os, ! shared_ptr<EdgeMap> spEdgeMap, ! shared_ptr<TestLevelTestResult> spTestLevelResult ) : _os(os), _spEdgeMap(spEdgeMap), *************** *** 82,85 **** --- 91,96 ---- bool ResolveRefVisitor::PostOrderVisit(AAFTypedObjNode<IAAFSourceClip>& node) { + RESOLVE_DEBUG( wcout << L"RESOLVE src clip " << node.GetLID() << endl; ) + bool fullyResolvedFlag = false; *************** *** 88,91 **** --- 99,105 ---- Node::LID tag = node.GetLID(); + + // Get the underlying AAFSourceClip object and extract the source + // reference. AxSourceClip axSrcClp(node.GetAAFObjectOfType()); *************** *** 93,96 **** --- 107,111 ---- aafMobID_t mobid = srcRef.sourceID; + // If it is null (zero valued) then we are at the end of mob chain. if ( AxConstants::NULL_MOBID == mobid ) { *************** *** 98,110 **** } shared_ptr<Node> spMobNode; spMobNode = MobNodeMap::GetInstance().GetMobNode(mobid); // Assert it really is a mob. (i.e. to verify the MobNodeMap is ! // delivering good data.) Then resolve the reference. ! if(spMobNode) { ! //verify mob IAAFMobSP spIaafMob; shared_ptr<AAFObjNode> spObjNode; --- 113,129 ---- } + // Else, resolve the mobid. We want to get a pointer to the node + // that has already been created for the mob. shared_ptr<Node> spMobNode; spMobNode = MobNodeMap::GetInstance().GetMobNode(mobid); // Assert it really is a mob. (i.e. to verify the MobNodeMap is ! // delivering good data) Then resolve the reference to the the slot. if(spMobNode) { ! RESOLVE_DEBUG( wcout << L"\t -> Mob " << spMobNode->GetLID() << endl; ) ! ! // Verify that the mob node contains an AAFMob object (to ensure ! // our data structure is sane.) IAAFMobSP spIaafMob; shared_ptr<AAFObjNode> spObjNode; *************** *** 117,126 **** } ! //mob has been verified, proceed to the sourceclip ! shared_ptr<AAFTypedObjNode<IAAFSourceClip> > spSrcClp; shared_ptr<Node> temp = node.GetSharedPointerToNode(); ! spSrcClp = dynamic_pointer_cast<AAFTypedObjNode<IAAFSourceClip> >( temp ); ! if(spSrcClp) { // Now find the referenced slot (a child of the referenced mob) --- 136,147 ---- } ! // Before proceeding, we need to get a shared pointer to the ! // source clip node that was passed to this method as a reference. ! shared_ptr<AAFTypedObjNode<IAAFSourceClip> > spSrcClip; shared_ptr<Node> temp = node.GetSharedPointerToNode(); ! spSrcClip = dynamic_pointer_cast<AAFTypedObjNode<IAAFSourceClip> >( temp ); ! assert( spSrcClip ); ! if(spSrcClip) { // Now find the referenced slot (a child of the referenced mob) *************** *** 135,138 **** --- 156,161 ---- if ( spMobSlotNode ) { + RESOLVE_DEBUG( wcout << L"\t\t -> Slot " << spMobSlotNode->GetLID() << endl; ) + // Now make a reference from the src clip to the all the // components in the referenced mob that are within the range *************** *** 156,163 **** // included as part of the source reference. shared_ptr<vector<shared_ptr<Node> > > componentsToReference = ! GetChildComponents( spMobSlotNode ); for ( size_t i = 0 ; i < componentsToReference->size(); ++i ) { fullyResolvedFlag = true; shared_ptr<AAFComponentReference> spCompEdge( new AAFComponentReference(spMobSlotNode, --- 179,188 ---- // included as part of the source reference. shared_ptr<vector<shared_ptr<Node> > > componentsToReference = ! GetContainedChildComponents( spMobSlotNode ); for ( size_t i = 0 ; i < componentsToReference->size(); ++i ) { + RESOLVE_DEBUG( wcout << L"\t\t\t -> Component " << (*componentsToReference)[i]->GetLID() << endl; ) + fullyResolvedFlag = true; shared_ptr<AAFComponentReference> spCompEdge( new AAFComponentReference(spMobSlotNode, *************** *** 173,177 **** if ( fullyResolvedFlag ) { ! shared_ptr<AAFMobReference> spMobRefEdge( new AAFMobReference(spSrcClp, spMobNode, tag) ); _spEdgeMap->AddEdge( spMobRefEdge ); --- 198,202 ---- if ( fullyResolvedFlag ) { ! shared_ptr<AAFMobReference> spMobRefEdge( new AAFMobReference(spSrcClip, spMobNode, tag) ); _spEdgeMap->AddEdge( spMobRefEdge ); *************** *** 191,198 **** _spTestLevelResult->AddSingleResult( L"REQ_EP_016", ! TestResult::WARN, ! L"Mob Resolve", ! L"Resolve source clip mob reference.", ! explain ); } --- 216,223 ---- _spTestLevelResult->AddSingleResult( L"REQ_EP_016", ! TestResult::WARN, ! L"Mob Resolve", ! L"Resolve source clip mob reference.", ! explain ); } *************** *** 200,204 **** } ! shared_ptr<vector<shared_ptr<Node> > > ResolveRefVisitor::GetChildComponents( shared_ptr<Node> spMobSlotNode ) { shared_ptr<vector<shared_ptr<Node> > > spChildren( new vector<shared_ptr<Node> > ); --- 225,230 ---- } ! shared_ptr<vector<shared_ptr<Node> > > ! ResolveRefVisitor::GetContainedChildComponents( shared_ptr<Node> spMobSlotNode ) { shared_ptr<vector<shared_ptr<Node> > > spChildren( new vector<shared_ptr<Node> > ); *************** *** 211,215 **** ++iter ) { ! spChildren->push_back( (*iter)->GetChildNode() ); } --- 237,245 ---- ++iter ) { ! shared_ptr<Edge> spEdge( *iter ); ! if ( spEdge->GetKind() == Edge::EDGE_KIND_CONTAINMENT ) ! { ! spChildren->push_back( (*iter)->GetChildNode() ); ! } } *************** *** 260,267 **** _spTestLevelResult->AddSingleResult( L"REQ_EP_257", ! TestResult::FAIL, ! L"Slot Resolve", ! L"Lookup slot in resolved mob.", ! ss.str() ); return shared_ptr<Node>(); --- 290,297 ---- _spTestLevelResult->AddSingleResult( L"REQ_EP_257", ! TestResult::FAIL, ! L"Slot Resolve", ! L"Lookup slot in resolved mob.", ! ss.str() ); return shared_ptr<Node>(); |