forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaddress.h
65 lines (48 loc) · 1.83 KB
/
address.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_PROFILING_ADDRESS_H_
#define CHROME_PROFILING_ADDRESS_H_
#include <stdint.h>
#include <functional>
#include <iosfwd>
#include "base/hash.h"
namespace profiling {
// Wrapper around an address in the instrumented process. This wrapper should
// be a zero-overhead abstraction around a 64-bit integer (so pass by value)
// that prevents getting confused between addresses in the local process and
// ones in the instrumented process.
struct Address {
Address() : value(0) {}
explicit Address(uint64_t v) : value(v) {}
uint64_t value;
bool operator<(Address other) const { return value < other.value; }
bool operator<=(Address other) const { return value <= other.value; }
bool operator>(Address other) const { return value > other.value; }
bool operator>=(Address other) const { return value >= other.value; }
bool operator==(Address other) const { return value == other.value; }
bool operator!=(Address other) const { return value != other.value; }
Address operator+(int64_t delta) const { return Address(value + delta); }
Address operator+=(int64_t delta) {
value += delta;
return *this;
}
Address operator-(int64_t delta) const { return Address(value - delta); }
Address operator-=(int64_t delta) {
value -= delta;
return *this;
}
int64_t operator-(Address a) const { return value - a.value; }
};
} // namespace profiling
namespace std {
template <>
struct hash<profiling::Address> {
typedef profiling::Address argument_type;
typedef uint32_t result_type;
result_type operator()(argument_type a) const {
return base::Hash(&a.value, sizeof(int64_t));
}
};
} // namespace std
#endif // CHROME_PROFILING_ADDRESS_H_