Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(424)

Unified Diff: net/quic/quic_arena_scoped_ptr.h

Issue 2193073003: Move shared files in net/quic/ into net/quic/core/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: io_thread_unittest.cc Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_alarm_test.cc ('k') | net/quic/quic_arena_scoped_ptr_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_arena_scoped_ptr.h
diff --git a/net/quic/quic_arena_scoped_ptr.h b/net/quic/quic_arena_scoped_ptr.h
deleted file mode 100644
index 5083036f9075a726ed0bf1394f988f5dcddf44fe..0000000000000000000000000000000000000000
--- a/net/quic/quic_arena_scoped_ptr.h
+++ /dev/null
@@ -1,210 +0,0 @@
-// Copyright (c) 2016 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.
-
-// unique_ptr-style pointer that stores values that may be from an arena. Takes
-// up the same storage as the platform's native pointer type. Takes ownership
-// of the value it's constructed with; if holding a value in an arena, and the
-// type has a non-trivial destructor, the arena must outlive the
-// QuicArenaScopedPtr. Does not support array overloads.
-
-#ifndef NET_QUIC_QUIC_ARENA_SCOPED_PTR_H_
-#define NET_QUIC_QUIC_ARENA_SCOPED_PTR_H_
-
-#include <cstdint> // for uintptr_t
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "net/quic/quic_utils.h"
-
-namespace net {
-
-template <typename T>
-class QuicArenaScopedPtr {
- static_assert(QUIC_ALIGN_OF(T*) > 1,
- "QuicArenaScopedPtr can only store objects that are aligned to "
- "greater than 1 byte.");
-
- public:
- // Constructs an empty QuicArenaScopedPtr.
- QuicArenaScopedPtr();
-
- // Constructs a QuicArenaScopedPtr referencing the heap-allocated memory
- // provided.
- explicit QuicArenaScopedPtr(T* value);
-
- template <typename U>
- QuicArenaScopedPtr(QuicArenaScopedPtr<U>&& other); // NOLINT
- template <typename U>
- QuicArenaScopedPtr& operator=(QuicArenaScopedPtr<U>&& other);
- ~QuicArenaScopedPtr();
-
- // Returns a pointer to the value.
- T* get() const;
-
- // Returns a reference to the value.
- T& operator*() const;
-
- // Returns a pointer to the value.
- T* operator->() const;
-
- // Swaps the value of this pointer with |other|.
- void swap(QuicArenaScopedPtr& other);
-
- // Resets the held value to |value|.
- void reset(T* value = nullptr);
-
- // Returns true if |this| came from an arena. Primarily exposed for testing
- // and assertions.
- bool is_from_arena();
-
- private:
- // Friends with other derived types of QuicArenaScopedPtr, to support the
- // derived-types case.
- template <typename U>
- friend class QuicArenaScopedPtr;
- // Also befriend all known arenas, only to prevent misuse.
- template <uint32_t ArenaSize>
- friend class QuicOneBlockArena;
-
- // Tag to denote that a QuicArenaScopedPtr is being explicitly created by an
- // arena.
- enum class ConstructFrom { kHeap, kArena };
-
- // Constructs a QuicArenaScopedPtr with the given representation.
- QuicArenaScopedPtr(void* value, ConstructFrom from);
-
- // Low-order bits of value_ that determine if the pointer came from an arena.
- static const uintptr_t kFromArenaMask = 0x1;
-
- // Every platform we care about has at least 4B aligned integers, so store the
- // is_from_arena bit in the least significant bit.
- void* value_;
-
- DISALLOW_COPY_AND_ASSIGN(QuicArenaScopedPtr);
-};
-
-template <typename T>
-bool operator==(const QuicArenaScopedPtr<T>& left,
- const QuicArenaScopedPtr<T>& right) {
- return left.get() == right.get();
-}
-
-template <typename T>
-bool operator!=(const QuicArenaScopedPtr<T>& left,
- const QuicArenaScopedPtr<T>& right) {
- return left.get() != right.get();
-}
-
-template <typename T>
-bool operator==(std::nullptr_t, const QuicArenaScopedPtr<T>& right) {
- return nullptr == right.get();
-}
-
-template <typename T>
-bool operator!=(std::nullptr_t, const QuicArenaScopedPtr<T>& right) {
- return nullptr != right.get();
-}
-
-template <typename T>
-bool operator==(const QuicArenaScopedPtr<T>& left, std::nullptr_t) {
- return left.get() == nullptr;
-}
-
-template <typename T>
-bool operator!=(const QuicArenaScopedPtr<T>& left, std::nullptr_t) {
- return left.get() != nullptr;
-}
-
-template <typename T>
-QuicArenaScopedPtr<T>::QuicArenaScopedPtr()
- : value_(nullptr) {}
-
-template <typename T>
-QuicArenaScopedPtr<T>::QuicArenaScopedPtr(T* value)
- : QuicArenaScopedPtr(value, ConstructFrom::kHeap) {}
-
-template <typename T>
-template <typename U>
-QuicArenaScopedPtr<T>::QuicArenaScopedPtr(QuicArenaScopedPtr<U>&& other)
- : value_(other.value_) {
- static_assert(
- std::is_base_of<T, U>::value || std::is_same<T, U>::value,
- "Cannot construct QuicArenaScopedPtr; type is not derived or same.");
- other.value_ = nullptr;
-}
-
-template <typename T>
-template <typename U>
-QuicArenaScopedPtr<T>& QuicArenaScopedPtr<T>::operator=(
- QuicArenaScopedPtr<U>&& other) {
- static_assert(
- std::is_base_of<T, U>::value || std::is_same<T, U>::value,
- "Cannot assign QuicArenaScopedPtr; type is not derived or same.");
- swap(other);
- return *this;
-}
-
-template <typename T>
-QuicArenaScopedPtr<T>::~QuicArenaScopedPtr() {
- reset();
-}
-
-template <typename T>
-T* QuicArenaScopedPtr<T>::get() const {
- return reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(value_) &
- ~kFromArenaMask);
-}
-
-template <typename T>
-T& QuicArenaScopedPtr<T>::operator*() const {
- return *get();
-}
-
-template <typename T>
-T* QuicArenaScopedPtr<T>::operator->() const {
- return get();
-}
-
-template <typename T>
-void QuicArenaScopedPtr<T>::swap(QuicArenaScopedPtr& other) {
- using std::swap;
- swap(value_, other.value_);
-}
-
-template <typename T>
-bool QuicArenaScopedPtr<T>::is_from_arena() {
- return (reinterpret_cast<uintptr_t>(value_) & kFromArenaMask) != 0;
-}
-
-template <typename T>
-void QuicArenaScopedPtr<T>::reset(T* value) {
- if (value_ != nullptr) {
- if (is_from_arena()) {
- // Manually invoke the destructor.
- get()->~T();
- } else {
- delete get();
- }
- }
- DCHECK_EQ(0u, reinterpret_cast<uintptr_t>(value) & kFromArenaMask);
- value_ = value;
-}
-
-template <typename T>
-QuicArenaScopedPtr<T>::QuicArenaScopedPtr(void* value, ConstructFrom from_arena)
- : value_(value) {
- DCHECK_EQ(0u, reinterpret_cast<uintptr_t>(value_) & kFromArenaMask);
- switch (from_arena) {
- case ConstructFrom::kHeap:
- break;
- case ConstructFrom::kArena:
- value_ = reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(value_) |
- QuicArenaScopedPtr<T>::kFromArenaMask);
- break;
- }
-}
-
-} // namespace net
-
-#endif // NET_QUIC_QUIC_ARENA_SCOPED_PTR_H_
« no previous file with comments | « net/quic/quic_alarm_test.cc ('k') | net/quic/quic_arena_scoped_ptr_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698