2  * Copyright (C) 2012 Apple Inc. All rights reserved. 
   4  * Redistribution and use in source and binary forms, with or without 
   5  * modification, are permitted provided that the following conditions 
   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. 
  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.  
  26 #ifndef ProfilerOrigin_h 
  27 #define ProfilerOrigin_h 
  29 #include "CodeBlockHash.h" 
  30 #include "JSCJSValue.h" 
  31 #include <wtf/HashMap.h> 
  32 #include <wtf/PrintStream.h> 
  46         : m_bytecodeIndex(std::numeric_limits
<unsigned>::max()) 
  50     Origin(WTF::HashTableDeletedValueType
) 
  51         : m_bytecodeIndex(std::numeric_limits
<unsigned>::max() - 1) 
  55     Origin(Bytecodes
* bytecodes
, unsigned bytecodeIndex
) 
  56         : m_bytecodes(bytecodes
) 
  57         , m_bytecodeIndex(bytecodeIndex
) 
  59         ASSERT(m_bytecodeIndex 
< std::numeric_limits
<unsigned>::max() - 1); 
  62     Origin(Database
&, CodeBlock
*, unsigned bytecodeIndex
); 
  64     bool operator!() const { return m_bytecodeIndex 
== std::numeric_limits
<unsigned>::max(); } 
  66     Bytecodes
* bytecodes() const { return m_bytecodes
; } 
  67     unsigned bytecodeIndex() const { return m_bytecodeIndex
; } 
  69     bool operator==(const Origin
&) const; 
  70     bool operator!=(const Origin
& other
) const { return !(*this == other
); } 
  71     unsigned hash() const; 
  73     bool isHashTableDeletedValue() const; 
  75     void dump(PrintStream
&) const; 
  76     JSValue 
toJS(ExecState
*) const; 
  79     Bytecodes
* m_bytecodes
; 
  80     unsigned m_bytecodeIndex
; 
  83 inline bool Origin::operator==(const Origin
& other
) const 
  85     return m_bytecodes 
== other
.m_bytecodes
 
  86         && m_bytecodeIndex 
== other
.m_bytecodeIndex
; 
  89 inline unsigned Origin::hash() const 
  91     return WTF::PtrHash
<Bytecodes
*>::hash(m_bytecodes
) + m_bytecodeIndex
; 
  94 inline bool Origin::isHashTableDeletedValue() const 
  96     return m_bytecodeIndex 
== std::numeric_limits
<unsigned>::max(); 
 100     static unsigned hash(const Origin
& key
) { return key
.hash(); } 
 101     static bool equal(const Origin
& a
, const Origin
& b
) { return a 
== b
; } 
 102     static const bool safeToCompareToEmptyOrDeleted 
= true; 
 105 } } // namespace JSC::Profiler 
 109 template<typename T
> struct DefaultHash
; 
 110 template<> struct DefaultHash
<JSC::Profiler::Origin
> { 
 111     typedef JSC::Profiler::OriginHash Hash
; 
 114 template<typename T
> struct HashTraits
; 
 115 template<> struct HashTraits
<JSC::Profiler::Origin
> : SimpleClassHashTraits
<JSC::Profiler::Origin
> { }; 
 119 #endif // ProfilerOrigin_h