WebCore/platform/LinkHash.h
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 /*
       
     2  * Copyright (C) 2008 Google Inc. All rights reserved.
       
     3  *
       
     4  * Redistribution and use in source and binary forms, with or without
       
     5  * modification, are permitted provided that the following conditions
       
     6  * are met:
       
     7  * 1. Redistributions of source code must retain the above copyright
       
     8  *    notice, this list of conditions and the following disclaimer.
       
     9  * 2. Redistributions in binary form must reproduce the above copyright
       
    10  *    notice, this list of conditions and the following disclaimer in the
       
    11  *    documentation and/or other materials provided with the distribution.
       
    12  *
       
    13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
       
    14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
       
    15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       
    16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
       
    17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
       
    18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
    19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
       
    20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
       
    21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
       
    23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
       
    24  */
       
    25 
       
    26 #ifndef LinkHash_h
       
    27 #define LinkHash_h
       
    28 
       
    29 #include "StringHash.h"
       
    30 
       
    31 namespace WebCore {
       
    32 
       
    33 class AtomicString;
       
    34 class KURL;
       
    35 
       
    36 typedef uint64_t LinkHash;
       
    37 
       
    38 // Use the low 32-bits of the 64-bit LinkHash as the key for HashSets.
       
    39 struct LinkHashHash {
       
    40     static unsigned hash(LinkHash key) { return static_cast<unsigned>(key); }
       
    41     static bool equal(LinkHash a, LinkHash b) { return a == b; }
       
    42     static const bool safeToCompareToEmptyOrDeleted = true;
       
    43 
       
    44     // See AlreadyHashed::avoidDeletedValue.
       
    45     static unsigned avoidDeletedValue(LinkHash hash64)
       
    46     {
       
    47         ASSERT(hash64);
       
    48         unsigned hash = static_cast<unsigned>(hash64);
       
    49         unsigned newHash = hash | (!(hash + 1) << 31);
       
    50         ASSERT(newHash);
       
    51         ASSERT(newHash != 0xFFFFFFFF);
       
    52         return newHash;
       
    53     }
       
    54 };
       
    55 
       
    56 // Returns the has of the string that will be used for visited link coloring.
       
    57 LinkHash visitedLinkHash(const UChar* url, unsigned length);
       
    58 
       
    59 // Resolves the potentially relative URL "attributeURL" relative to the given
       
    60 // base URL, and returns the hash of the string that will be used for visited
       
    61 // link coloring. It will return the special value of 0 if attributeURL does not
       
    62 // look like a relative URL.
       
    63 LinkHash visitedLinkHash(const KURL& base, const AtomicString& attributeURL);
       
    64 
       
    65 // Resolves the potentially relative URL "attributeURL" relative to the given
       
    66 // base URL, and returns the hash of the string that will be used for visited.
       
    67 // It will return an empty Vector in case of errors.
       
    68 void visitedURL(const KURL& base, const AtomicString& attributeURL, Vector<UChar, 512>&);
       
    69 
       
    70 
       
    71 }  // namespace WebCore
       
    72 
       
    73 #endif  // LinkHash_h