Loading...
Searching...
No Matches
sentinel-pointer.h
Go to the documentation of this file.
1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef INCLUDE_CPPGC_SENTINEL_POINTER_H_
6#define INCLUDE_CPPGC_SENTINEL_POINTER_H_
7
8#include <cstdint>
9
11
12namespace cppgc {
13namespace internal {
14
15// Special tag type used to denote some sentinel member. The semantics of the
16// sentinel is defined by the embedder.
18#if defined(CPPGC_POINTER_COMPRESSION)
19 static constexpr intptr_t kSentinelValue =
20 1 << api_constants::kPointerCompressionShift;
21#else // !defined(CPPGC_POINTER_COMPRESSION)
22 static constexpr intptr_t kSentinelValue = 0b10;
23#endif // !defined(CPPGC_POINTER_COMPRESSION)
24 template <typename T>
25 operator T*() const {
26 return reinterpret_cast<T*>(kSentinelValue);
27 }
28 // Hidden friends.
29 friend bool operator==(SentinelPointer, SentinelPointer) { return true; }
30 friend bool operator!=(SentinelPointer, SentinelPointer) { return false; }
31};
32
33} // namespace internal
34
36
37} // namespace cppgc
38
39#endif // INCLUDE_CPPGC_SENTINEL_POINTER_H_
Definition: allocation.h:38
constexpr internal::SentinelPointer kSentinelPointer
Definition: sentinel-pointer.h:35
Definition: sentinel-pointer.h:17
friend bool operator==(SentinelPointer, SentinelPointer)
Definition: sentinel-pointer.h:29
static constexpr intptr_t kSentinelValue
Definition: sentinel-pointer.h:22
friend bool operator!=(SentinelPointer, SentinelPointer)
Definition: sentinel-pointer.h:30