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