本文整理汇总了C++中SListPure::delSucc方法的典型用法代码示例。如果您正苦于以下问题:C++ SListPure::delSucc方法的具体用法?C++ SListPure::delSucc怎么用?C++ SListPure::delSucc使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SListPure
的用法示例。
在下文中一共展示了SListPure::delSucc方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Reduce
// Reduction reduced a set of leaves determined by their keys stored
// in leafKeys. Integer redNumber is for debugging only.
bool PlanarSubgraphPQTree::
Reduction(SListPure<PlanarLeafKey<whaInfo*>*> &leafKeys,
SList<PQLeafKey<edge,whaInfo*,bool>*> &eliminatedKeys,
int redNumber)
{
SListPure<PQLeafKey<edge,whaInfo*,bool>*> castLeafKeys;
SListIterator<PlanarLeafKey<whaInfo*>* > it;
for (it = leafKeys.begin(); it.valid(); ++it)
{
castLeafKeys.pushBack((PQLeafKey<edge,whaInfo*,bool>*) *it);
#ifdef OGDF_DEBUG
if (int(ogdf::debugLevel) >= int(dlHeavyChecks))
{
cout << (*it)->print() << endl;
}
#endif
}
determineMinRemoveSequence(castLeafKeys,eliminatedKeys);
removeEliminatedLeaves(eliminatedKeys);
SListIterator<PQLeafKey<edge,whaInfo*,bool>* > itn = castLeafKeys.begin();
SListIterator<PQLeafKey<edge,whaInfo*,bool>* > itp = itn++;
for (; itn.valid();)
{
if ((*itn)->nodePointer()->status()== WHA_DELETE)
{
itn++;
castLeafKeys.delSucc(itp);
}
else
itp = itn++;
}
if ((*castLeafKeys.begin())->nodePointer()->status() == WHA_DELETE)
castLeafKeys.popFront();
return Reduce(castLeafKeys,redNumber);
}
示例2: removeRedundantVisibArcs
// remove "arcs" from visibArcs which we already have in the constraint graph
// (as basic arcs)
void CompactionConstraintGraphBase::removeRedundantVisibArcs(
SListPure<Tuple2<node,node> > &visibArcs)
{
// bucket sort list of all edges
SListPure<edge> all;
allEdges(all);
parallelFreeSort(*this,all);
// bucket sort visibArcs
BucketFirstIndex bucketSrc;
visibArcs.bucketSort(0,maxNodeIndex(),bucketSrc);
BucketSecondIndex bucketTgt;
visibArcs.bucketSort(0,maxNodeIndex(),bucketTgt);
// now, in both lists, arcs are sorted by increasing target index,
// and arcs with the same target index by increasing source index.
SListConstIterator<edge> itAll = all.begin();
SListIterator<Tuple2<node,node> > it, itNext, itPrev;
// for each arc in visibArcs, we check if it is also contained in list all
for(it = visibArcs.begin(); it.valid(); it = itNext)
{
// required since we delete from the list we traverse
itNext = it.succ();
int i = (*it).x1()->index();
int j = (*it).x2()->index();
// skip all arcs with smaller target index
while(itAll.valid() && (*itAll)->target()->index() < j)
++itAll;
// no more arcs => no more duplicates, so return
if (!itAll.valid()) break;
// if target index is j, we also skip all arcs with target index i
// and source index smaller than i
while(itAll.valid() && (*itAll)->target()->index() == j && (*itAll)->source()->index() < i)
++itAll;
// no more arcs => no more duplicates, so return
if (!itAll.valid()) break;
// if (i,j) is already present, we delete it from visibArcs
if ((*itAll)->source()->index() == i &&
(*itAll)->target()->index() == j)
{
//visibArcs.del(it);
if (itPrev.valid())
visibArcs.delSucc(itPrev);
else
visibArcs.popFront();
} else
itPrev = it;
}//for visibArcs
//****************************CHECK for
//special treatment for cage visibility
//two cases: input node cage: just compare arbitrary node
// merger cage: check first if there are mergers
itPrev = nullptr;
for(it = visibArcs.begin(); it.valid(); it = itNext)
{
itNext = it.succ();
OGDF_ASSERT(!m_path[(*it).x1()].empty());
OGDF_ASSERT(!m_path[(*it).x1()].empty());
node boundRepresentant1 = m_path[(*it).x1()].front();
node boundRepresentant2 = m_path[(*it).x2()].front();
node en1 = m_pPR->expandedNode(boundRepresentant1);
node en2 = m_pPR->expandedNode(boundRepresentant2);
//do not allow visibility constraints in fixed cages
//due to non-planarity with middle position constraints
if ( ( en1 && en2 ) && ( en1 == en2) )
{
if (itPrev.valid()) visibArcs.delSucc(itPrev);
else visibArcs.popFront();
}
else
{
//check if its a genmergerspanning vis arc, merge cases later
node firstn = nullptr, secondn = nullptr;
for (node n : m_path[(*it).x1()])
{
node en = m_pPR->expandedNode(n);
if (!en) continue;
if (!(m_pPR->typeOf(n) == Graph::generalizationExpander)) continue;
else { firstn = en; break; }
}//for
for (node n : m_path[(*it).x2()])
{
node en = m_pPR->expandedNode(n);
if (!en) continue;
if (!(m_pPR->typeOf(n) == Graph::generalizationExpander)) continue;
else { secondn = en; break; }
//.........这里部分代码省略.........