Example #1
0
void InspectorNodeFinder::searchUsingDOMTreeTraversal(Node* parentNode)
{
    // Manual plain text search.
    for (auto node = parentNode; node; node = NodeTraversal::next(node, parentNode)) {
        switch (node->nodeType()) {
        case Node::TEXT_NODE:
        case Node::COMMENT_NODE:
        case Node::CDATA_SECTION_NODE: {
            if (node->nodeValue().findIgnoringCase(m_whitespaceTrimmedQuery) != notFound)
                m_results.add(node);
            break;
        }
        case Node::ELEMENT_NODE: {
            if (matchesElement(*toElement(node)))
                m_results.add(node);

            // Search inside frame elements.
            if (node->isFrameOwnerElement()) {
                HTMLFrameOwnerElement* frameOwner = toHTMLFrameOwnerElement(node);
                if (Document* document = frameOwner->contentDocument())
                    performSearch(document);
            }

            break;
        }
        default:
            break;
        }
    }
}
unsigned SuperHashTable::doFindElement(unsigned v, const void * findET) const
{
#ifdef HASHSIZE_POWER2
    v = v & (tablesize - 1);
#else
    v = v % tablesize;
#endif
    unsigned vs = v;
#ifdef TRACE_HASH
    unsigned searchlen = 0;
#endif
    while (1)
    {
#ifdef MY_TRACE_HASH
        my_search_tot++;
#endif
        void *et = table[v];
        if (!et)
            break;
        if (matchesElement(et, findET))
            break;
#ifdef TRACE_HASH
        searchlen ++;
#endif
        v++;
        if (v==tablesize)
            v = 0;
        if (v==vs)
            break;
    }
#ifdef MY_TRACE_HASH
    my_search_num++;
    if(my_search_num != 0)
        printf("Hash table average search length %d\n", (int) (my_search_tot/my_search_num));
#endif
#ifdef TRACE_HASH
    note_searchlen(searchlen);
#endif
    setCache(v);
    return v;
}