本文整理汇总了C++中WeakRef::next方法的典型用法代码示例。如果您正苦于以下问题:C++ WeakRef::next方法的具体用法?C++ WeakRef::next怎么用?C++ WeakRef::next使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WeakRef
的用法示例。
在下文中一共展示了WeakRef::next方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: defined
void
GC::Heap::mark(void) {
#if defined(MINIZINC_GC_STATS)
std::cerr << "================= mark =================: ";
gc_stats.clear();
#endif
for (KeepAlive* e = _roots; e != NULL; e = e->next()) {
if ((*e)() && (*e)()->_gc_mark==0) {
Expression::mark((*e)());
#if defined(MINIZINC_GC_STATS)
gc_stats[(*e)()->_id].keepalive++;
#endif
}
}
#if defined(MINIZINC_GC_STATS)
std::cerr << "+";
#endif
Model* m = _rootset;
if (m==NULL)
return;
do {
for (unsigned int j=0; j<m->_items.size(); j++) {
Item* i = m->_items[j];
if (i->_gc_mark==0) {
i->_gc_mark = 1;
i->loc().mark();
switch (i->iid()) {
case Item::II_INC:
i->cast<IncludeI>()->f().mark();
break;
case Item::II_VD:
Expression::mark(i->cast<VarDeclI>()->e());
#if defined(MINIZINC_GC_STATS)
gc_stats[i->cast<VarDeclI>()->e()->Expression::eid()].inmodel++;
#endif
break;
case Item::II_ASN:
i->cast<AssignI>()->id().mark();
Expression::mark(i->cast<AssignI>()->e());
Expression::mark(i->cast<AssignI>()->decl());
break;
case Item::II_CON:
Expression::mark(i->cast<ConstraintI>()->e());
#if defined(MINIZINC_GC_STATS)
gc_stats[i->cast<ConstraintI>()->e()->Expression::eid()].inmodel++;
#endif
break;
case Item::II_SOL:
{
SolveI* si = i->cast<SolveI>();
for (ExpressionSetIter it = si->ann().begin(); it != si->ann().end(); ++it) {
Expression::mark(*it);
}
}
Expression::mark(i->cast<SolveI>()->e());
break;
case Item::II_OUT:
Expression::mark(i->cast<OutputI>()->e());
break;
case Item::II_FUN:
{
FunctionI* fi = i->cast<FunctionI>();
fi->id().mark();
Expression::mark(fi->ti());
for (ExpressionSetIter it = fi->ann().begin(); it != fi->ann().end(); ++it) {
Expression::mark(*it);
}
Expression::mark(fi->e());
fi->params().mark();
for (unsigned int k=0; k<fi->params().size(); k++) {
Expression::mark(fi->params()[k]);
}
}
break;
}
}
}
m = m->_roots_next;
} while (m != _rootset);
for (unsigned int i=trail.size(); i--;) {
Expression::mark(trail[i].v);
}
for (WeakRef* wr = _weakRefs; wr != NULL; wr = wr->next()) {
if ((*wr)() && (*wr)()->_gc_mark==0) {
wr->_e = NULL;
wr->_valid = false;
}
}
#if defined(MINIZINC_GC_STATS)
std::cerr << "+";
std::cerr << "\n";
#endif
}