本文整理汇总了C++中IdSet::add方法的典型用法代码示例。如果您正苦于以下问题:C++ IdSet::add方法的具体用法?C++ IdSet::add怎么用?C++ IdSet::add使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IdSet
的用法示例。
在下文中一共展示了IdSet::add方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
static inline bool
Enumerate(JSContext *cx, JSObject *obj, JSObject *pobj, jsid id,
bool enumerable, uintN flags, IdSet& ht, AutoIdVector *props)
{
JS_ASSERT_IF(flags & JSITER_OWNONLY, obj == pobj);
if (!(flags & JSITER_OWNONLY) || pobj->isProxy() || pobj->getOps()->enumerate) {
/* If we've already seen this, we definitely won't add it. */
IdSet::AddPtr p = ht.lookupForAdd(id);
if (JS_UNLIKELY(!!p))
return true;
/*
* It's not necessary to add properties to the hash table at the end of
* the prototype chain, but custom enumeration behaviors might return
* duplicated properties, so always add in such cases.
*/
if ((pobj->getProto() || pobj->isProxy() || pobj->getOps()->enumerate) && !ht.add(p, id))
return false;
}
if (enumerable || (flags & JSITER_HIDDEN))
return props->append(id);
return true;
}
示例2: least_common_ancestor
SSATmp* least_common_ancestor(SSATmp* s1, SSATmp* s2) {
if (s1 == s2) return s1;
if (s1 == nullptr || s2 == nullptr) return nullptr;
IdSet<SSATmp> seen;
auto const step = [] (SSATmp* v) {
assertx(v != nullptr);
return v->inst()->isPassthrough() ?
v->inst()->getPassthroughValue() :
nullptr;
};
auto const process = [&] (SSATmp*& v) {
if (v == nullptr) return false;
if (seen[v]) return true;
seen.add(v);
v = step(v);
return false;
};
while (s1 != nullptr || s2 != nullptr) {
if (process(s1)) return s1;
if (process(s2)) return s2;
}
return nullptr;
}
示例3: removeUnreachable
bool removeUnreachable(IRUnit& unit) {
FTRACE(2, "removing unreachable blocks\n");
auto modified = false;
IdSet<Block> visited;
smart::stack<Block*> stack;
stack.push(unit.entry());
// Find all blocks reachable from the entry block.
while (!stack.empty()) {
auto* b = stack.top();
stack.pop();
if (visited[b]) continue;
visited.add(b);
if (auto* taken = b->taken()) {
if (!visited[taken]) stack.push(taken);
}
if (auto* next = b->next()) {
if (!visited[next]) stack.push(next);
}
}
// Erase any blocks not found above.
auto* trace = unit.main();
auto& blocks = trace->blocks();
for (auto it = blocks.begin(); it != blocks.end(); ) {
auto* b = *it;
if (!visited[b]) {
FTRACE(3, "removing unreachable B{}\n", b->id());
it = trace->erase(it);
modified = true;
} else {
++it;
}
}
return modified;
}
示例4:
static inline bool
Enumerate(JSContext *cx, JSObject *obj, JSObject *pobj, jsid id,
bool enumerable, uintN flags, IdSet& ht, AutoIdVector *props)
{
JS_ASSERT_IF(flags & JSITER_OWNONLY, obj == pobj);
/*
* We implement __proto__ using a property on |Object.prototype|, but
* because __proto__ is highly deserving of removal, we don't want it to
* show up in property enumeration, even if only for |Object.prototype|
* (think introspection by Prototype-like frameworks that add methods to
* the built-in prototypes). So exclude __proto__ if the object where the
* property was found has no [[Prototype]] and might be |Object.prototype|.
*/
if (JS_UNLIKELY(!pobj->getProto() && JSID_IS_ATOM(id, cx->runtime->atomState.protoAtom)))
return true;
if (!(flags & JSITER_OWNONLY) || pobj->isProxy() || pobj->getOps()->enumerate) {
/* If we've already seen this, we definitely won't add it. */
IdSet::AddPtr p = ht.lookupForAdd(id);
if (JS_UNLIKELY(!!p))
return true;
/*
* It's not necessary to add properties to the hash table at the end of
* the prototype chain, but custom enumeration behaviors might return
* duplicated properties, so always add in such cases.
*/
if ((pobj->getProto() || pobj->isProxy() || pobj->getOps()->enumerate) && !ht.add(p, id))
return false;
}
if (enumerable || (flags & JSITER_HIDDEN))
return props->append(id);
return true;
}