aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/base/address-region.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/base/address-region.h')
-rw-r--r--deps/v8/src/base/address-region.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/deps/v8/src/base/address-region.h b/deps/v8/src/base/address-region.h
new file mode 100644
index 0000000000..6b733cfe4d
--- /dev/null
+++ b/deps/v8/src/base/address-region.h
@@ -0,0 +1,70 @@
+// Copyright 2018 the V8 project 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 V8_BASE_ADDRESS_REGION_H_
+#define V8_BASE_ADDRESS_REGION_H_
+
+#include <iostream>
+
+#include "src/base/macros.h"
+
+namespace v8 {
+namespace base {
+
+// Helper class representing an address region of certain size.
+class AddressRegion {
+ public:
+ typedef uintptr_t Address;
+
+ AddressRegion() = default;
+
+ AddressRegion(Address address, size_t size)
+ : address_(address), size_(size) {}
+
+ Address begin() const { return address_; }
+ Address end() const { return address_ + size_; }
+
+ size_t size() const { return size_; }
+ void set_size(size_t size) { size_ = size; }
+
+ bool is_empty() const { return size_ == 0; }
+
+ bool contains(Address address) const {
+ STATIC_ASSERT(std::is_unsigned<Address>::value);
+ return (address - begin()) < size();
+ }
+
+ bool contains(Address address, size_t size) const {
+ STATIC_ASSERT(std::is_unsigned<Address>::value);
+ Address offset = address - begin();
+ return (offset < size_) && (offset + size <= size_);
+ }
+
+ bool contains(AddressRegion region) const {
+ return contains(region.address_, region.size_);
+ }
+
+ bool operator==(AddressRegion other) const {
+ return address_ == other.address_ && size_ == other.size_;
+ }
+
+ bool operator!=(AddressRegion other) const {
+ return address_ != other.address_ || size_ != other.size_;
+ }
+
+ private:
+ Address address_ = 0;
+ size_t size_ = 0;
+};
+ASSERT_TRIVIALLY_COPYABLE(AddressRegion);
+
+inline std::ostream& operator<<(std::ostream& out, AddressRegion region) {
+ return out << "[" << reinterpret_cast<void*>(region.begin()) << "+"
+ << region.size() << "]";
+}
+
+} // namespace base
+} // namespace v8
+
+#endif // V8_BASE_ADDRESS_REGION_H_