src/3rdparty/webkit/JavaScriptCore/profiler/CallIdentifier.h
changeset 0 1918ee327afb
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /*
       
     2  * Copyright (C) 2008 Apple 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 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 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 
       
    27 #ifndef CallIdentifier_h
       
    28 #define CallIdentifier_h
       
    29 
       
    30 #include <runtime/UString.h>
       
    31 #include "FastAllocBase.h"
       
    32 
       
    33 namespace JSC {
       
    34 
       
    35     struct CallIdentifier : public FastAllocBase {
       
    36         UString m_name;
       
    37         UString m_url;
       
    38         unsigned m_lineNumber;
       
    39 
       
    40         CallIdentifier()
       
    41             : m_lineNumber(0)
       
    42         {
       
    43         }
       
    44 
       
    45         CallIdentifier(const UString& name, const UString& url, int lineNumber)
       
    46             : m_name(name)
       
    47             , m_url(url)
       
    48             , m_lineNumber(lineNumber)
       
    49         {
       
    50         }
       
    51 
       
    52         inline bool operator==(const CallIdentifier& ci) const { return ci.m_lineNumber == m_lineNumber && ci.m_name == m_name && ci.m_url == m_url; }
       
    53         inline bool operator!=(const CallIdentifier& ci) const { return !(*this == ci); }
       
    54 
       
    55         struct Hash {
       
    56             static unsigned hash(const CallIdentifier& key)
       
    57             {
       
    58                 unsigned hashCodes[3] = {
       
    59                     key.m_name.rep()->hash(),
       
    60                     key.m_url.rep()->hash(),
       
    61                     key.m_lineNumber
       
    62                 };
       
    63                 return UString::Rep::computeHash(reinterpret_cast<char*>(hashCodes), sizeof(hashCodes));
       
    64             }
       
    65 
       
    66             static bool equal(const CallIdentifier& a, const CallIdentifier& b) { return a == b; }
       
    67             static const bool safeToCompareToEmptyOrDeleted = true;
       
    68         };
       
    69 
       
    70         unsigned hash() const { return Hash::hash(*this); }
       
    71 
       
    72 #ifndef NDEBUG
       
    73         operator const char*() const { return c_str(); }
       
    74         const char* c_str() const { return m_name.UTF8String().c_str(); }
       
    75 #endif
       
    76     };
       
    77 
       
    78 } // namespace JSC
       
    79 
       
    80 namespace WTF {
       
    81 
       
    82     template<> struct DefaultHash<JSC::CallIdentifier> { typedef JSC::CallIdentifier::Hash Hash; };
       
    83 
       
    84     template<> struct HashTraits<JSC::CallIdentifier> : GenericHashTraits<JSC::CallIdentifier> {
       
    85         static void constructDeletedValue(JSC::CallIdentifier& slot)
       
    86         {
       
    87             new (&slot) JSC::CallIdentifier(JSC::UString(), JSC::UString(), std::numeric_limits<unsigned>::max());
       
    88         }
       
    89         static bool isDeletedValue(const JSC::CallIdentifier& value)
       
    90         {
       
    91             return value.m_name.isNull() && value.m_url.isNull() && value.m_lineNumber == std::numeric_limits<unsigned>::max();
       
    92         }
       
    93     };
       
    94 
       
    95 } // namespace WTF
       
    96 
       
    97 #endif  // CallIdentifier_h
       
    98