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

Unified Diff: third_party/WebKit/Source/wtf/TypeTraits.h

Issue 2748083005: Move files in wtf/ to platform/wtf/ (Part 1). (Closed)
Patch Set: Created 3 years, 9 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 | « third_party/WebKit/Source/wtf/Forward.h ('k') | third_party/WebKit/Source/wtf/build_config.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/wtf/TypeTraits.h
diff --git a/third_party/WebKit/Source/wtf/TypeTraits.h b/third_party/WebKit/Source/wtf/TypeTraits.h
index 987d3d36f005aafd5e77ca839c01bcfa198f3619..1fafd32ac4b210632f3d960523dc28adafd7efd8 100644
--- a/third_party/WebKit/Source/wtf/TypeTraits.h
+++ b/third_party/WebKit/Source/wtf/TypeTraits.h
@@ -1,383 +1,9 @@
-/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2009, 2010 Google Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
+// 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 TypeTraits_h
-#define TypeTraits_h
+#include "platform/wtf/TypeTraits.h"
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-#include "wtf/Compiler.h"
-
-namespace WTF {
-
-// Returns a string that contains the type name of |T| as a substring.
-template <typename T>
-inline const char* getStringWithTypeName() {
- return WTF_PRETTY_FUNCTION;
-}
-
-template <typename T>
-struct IsWeak {
- static const bool value = false;
-};
-
-enum WeakHandlingFlag {
- NoWeakHandlingInCollections,
- WeakHandlingInCollections
-};
-
-template <typename T, typename From>
-class IsAssignable {
- typedef char YesType;
- struct NoType {
- char padding[8];
- };
-
- template <typename T2,
- typename From2,
- typename = decltype(std::declval<T2&>() = std::declval<From2>())>
- static YesType checkAssignability(int);
- template <typename T2, typename From2>
- static NoType checkAssignability(...);
-
- public:
- static const bool value =
- sizeof(checkAssignability<T, From>(0)) == sizeof(YesType);
-};
-
-template <typename T>
-struct IsCopyAssignable {
- static_assert(!std::is_reference<T>::value, "T must not be a reference.");
- static const bool value = IsAssignable<T, const T&>::value;
-};
-
-template <typename T>
-struct IsMoveAssignable {
- static_assert(!std::is_reference<T>::value, "T must not be a reference.");
- static const bool value = IsAssignable<T, T&&>::value;
-};
-
-template <typename T>
-struct IsTriviallyCopyAssignable {
- static const bool value =
- __has_trivial_assign(T) && IsCopyAssignable<T>::value;
-};
-
-template <typename T>
-struct IsTriviallyMoveAssignable {
- // TODO(yutak): This isn't really correct, because __has_trivial_assign
- // appears to look only at copy assignment. However,
- // std::is_trivially_move_assignable isn't available at this moment, and
- // there isn't a good way to write that ourselves.
- //
- // Here we use IsTriviallyCopyAssignable as a conservative approximation: if T
- // is trivially copy assignable, T is trivially move assignable, too. This
- // definition misses a case where T is trivially move-only assignable, but
- // such cases should be rare.
- static const bool value = IsTriviallyCopyAssignable<T>::value;
-};
-
-template <typename T>
-class IsDestructible {
- typedef char YesType;
- struct NoType {
- char padding[8];
- };
-
- template <typename T2, typename = decltype(std::declval<T2>().~T2())>
- static YesType checkDestructibility(int);
- template <typename T2>
- static NoType checkDestructibility(...);
-
- public:
- static const bool value =
- sizeof(checkDestructibility<T>(0)) == sizeof(YesType);
-};
-
-template <typename T>
-struct IsTriviallyDefaultConstructible {
- static const bool value =
- __has_trivial_constructor(T) && std::is_constructible<T>::value;
-};
-
-template <typename T>
-struct IsTriviallyDestructible {
- static const bool value =
- __has_trivial_destructor(T) && IsDestructible<T>::value;
-};
-
-template <typename T, typename U>
-struct IsSubclass {
- private:
- typedef char YesType;
- struct NoType {
- char padding[8];
- };
-
- static YesType subclassCheck(U*);
- static NoType subclassCheck(...);
- static T* t;
-
- public:
- static const bool value = sizeof(subclassCheck(t)) == sizeof(YesType);
-};
-
-template <typename T, template <typename... V> class U>
-struct IsSubclassOfTemplate {
- private:
- typedef char YesType;
- struct NoType {
- char padding[8];
- };
-
- template <typename... W>
- static YesType subclassCheck(U<W...>*);
- static NoType subclassCheck(...);
- static T* t;
-
- public:
- static const bool value = sizeof(subclassCheck(t)) == sizeof(YesType);
-};
-
-template <typename T, template <typename V, size_t W> class U>
-struct IsSubclassOfTemplateTypenameSize {
- private:
- typedef char YesType;
- struct NoType {
- char padding[8];
- };
-
- template <typename X, size_t Y>
- static YesType subclassCheck(U<X, Y>*);
- static NoType subclassCheck(...);
- static T* t;
-
- public:
- static const bool value = sizeof(subclassCheck(t)) == sizeof(YesType);
-};
-
-template <typename T, template <typename V, size_t W, typename X> class U>
-struct IsSubclassOfTemplateTypenameSizeTypename {
- private:
- typedef char YesType;
- struct NoType {
- char padding[8];
- };
-
- template <typename Y, size_t Z, typename A>
- static YesType subclassCheck(U<Y, Z, A>*);
- static NoType subclassCheck(...);
- static T* t;
-
- public:
- static const bool value = sizeof(subclassCheck(t)) == sizeof(YesType);
-};
-
-template <typename T, template <class V> class OuterTemplate>
-struct RemoveTemplate {
- typedef T Type;
-};
-
-template <typename T, template <class V> class OuterTemplate>
-struct RemoveTemplate<OuterTemplate<T>, OuterTemplate> {
- typedef T Type;
-};
-
-#if (COMPILER(MSVC) || !GCC_VERSION_AT_LEAST(4, 9, 0)) && !COMPILER(CLANG)
-// FIXME: MSVC bug workaround. Remove once MSVC STL is fixed.
-// FIXME: GCC before 4.9.0 seems to have the same issue.
-// C++ 2011 Spec (ISO/IEC 14882:2011(E)) 20.9.6.2 Table 51 states that
-// the template parameters shall be a complete type if they are different types.
-// However, MSVC checks for type completeness even if they are the same type.
-// Here, we use a template specialization for same type case to allow incomplete
-// types.
-
-template <typename T, typename U>
-struct IsConvertible {
- static const bool value = std::is_convertible<T, U>::value;
-};
-
-template <typename T>
-struct IsConvertible<T, T> {
- static const bool value = true;
-};
-
-#define EnsurePtrConvertibleArgDecl(From, To) \
- typename std::enable_if<WTF::IsConvertible<From*, To*>::value>::type* = \
- nullptr
-#define EnsurePtrConvertibleArgDefn(From, To) \
- typename std::enable_if<WTF::IsConvertible<From*, To*>::value>::type*
-#else
-#define EnsurePtrConvertibleArgDecl(From, To) \
- typename std::enable_if<std::is_convertible<From*, To*>::value>::type* = \
- nullptr
-#define EnsurePtrConvertibleArgDefn(From, To) \
- typename std::enable_if<std::is_convertible<From*, To*>::value>::type*
-#endif
-
-} // namespace WTF
-
-namespace blink {
-
-class Visitor;
-
-} // namespace blink
-
-namespace WTF {
-
-template <typename T>
-class IsTraceable {
- typedef char YesType;
- typedef struct NoType { char padding[8]; } NoType;
-
- // Note that this also checks if a superclass of V has a trace method.
- template <typename V>
- static YesType checkHasTraceMethod(
- V* v,
- blink::Visitor* p = nullptr,
- typename std::enable_if<
- std::is_same<decltype(v->trace(p)), void>::value>::type* g = nullptr);
- template <typename V>
- static NoType checkHasTraceMethod(...);
-
- public:
- // We add sizeof(T) to both sides here, because we want it to fail for
- // incomplete types. Otherwise it just assumes that incomplete types do not
- // have a trace method, which may not be true.
- static const bool value = sizeof(YesType) + sizeof(T) ==
- sizeof(checkHasTraceMethod<T>(nullptr)) + sizeof(T);
-};
-
-// Convenience template wrapping the IsTraceableInCollection template in
-// Collection Traits. It helps make the code more readable.
-template <typename Traits>
-class IsTraceableInCollectionTrait {
- public:
- static const bool value = Traits::template IsTraceableInCollection<>::value;
-};
-
-template <typename T, typename U>
-struct IsTraceable<std::pair<T, U>> {
- static const bool value = IsTraceable<T>::value || IsTraceable<U>::value;
-};
-
-// This is used to check that DISALLOW_NEW_EXCEPT_PLACEMENT_NEW objects are not
-// stored in off-heap Vectors, HashTables etc.
-template <typename T>
-struct AllowsOnlyPlacementNew {
- private:
- using YesType = char;
- struct NoType {
- char padding[8];
- };
-
- template <typename U>
- static YesType checkMarker(typename U::IsAllowOnlyPlacementNew*);
- template <typename U>
- static NoType checkMarker(...);
-
- public:
- static const bool value = sizeof(checkMarker<T>(nullptr)) == sizeof(YesType);
-};
-
-template <typename T>
-class IsGarbageCollectedType {
- typedef char YesType;
- typedef struct NoType { char padding[8]; } NoType;
-
- static_assert(sizeof(T), "T must be fully defined");
-
- using NonConstType = typename std::remove_const<T>::type;
- template <typename U>
- static YesType checkGarbageCollectedType(
- typename U::IsGarbageCollectedTypeMarker*);
- template <typename U>
- static NoType checkGarbageCollectedType(...);
-
- // Separately check for GarbageCollectedMixin, which declares a different
- // marker typedef, to avoid resolution ambiguity for cases like
- // IsGarbageCollectedType<B> over:
- //
- // class A : public GarbageCollected<A>, public GarbageCollectedMixin {
- // USING_GARBAGE_COLLECTED_MIXIN(A);
- // ...
- // };
- // class B : public A, public GarbageCollectedMixin { ... };
- //
- template <typename U>
- static YesType checkGarbageCollectedMixinType(
- typename U::IsGarbageCollectedMixinMarker*);
- template <typename U>
- static NoType checkGarbageCollectedMixinType(...);
-
- public:
- static const bool value =
- (sizeof(YesType) ==
- sizeof(checkGarbageCollectedType<NonConstType>(nullptr))) ||
- (sizeof(YesType) ==
- sizeof(checkGarbageCollectedMixinType<NonConstType>(nullptr)));
-};
-
-template <>
-class IsGarbageCollectedType<void> {
- public:
- static const bool value = false;
-};
-
-template <typename T>
-class IsPersistentReferenceType {
- typedef char YesType;
- typedef struct NoType { char padding[8]; } NoType;
-
- template <typename U>
- static YesType checkPersistentReferenceType(
- typename U::IsPersistentReferenceTypeMarker*);
- template <typename U>
- static NoType checkPersistentReferenceType(...);
-
- public:
- static const bool value =
- (sizeof(YesType) == sizeof(checkPersistentReferenceType<T>(nullptr)));
-};
-
-template <typename T,
- bool = std::is_function<typename std::remove_const<
- typename std::remove_pointer<T>::type>::type>::value ||
- std::is_void<typename std::remove_const<
- typename std::remove_pointer<T>::type>::type>::value>
-class IsPointerToGarbageCollectedType {
- public:
- static const bool value = false;
-};
-
-template <typename T>
-class IsPointerToGarbageCollectedType<T*, false> {
- public:
- static const bool value = IsGarbageCollectedType<T>::value;
-};
-
-} // namespace WTF
-
-using WTF::IsGarbageCollectedType;
-
-#endif // TypeTraits_h
+// The contents of this header was moved to platform/wtf as part of
+// WTF migration project. See the following post for details:
+// https://groups.google.com/a/chromium.org/d/msg/blink-dev/tLdAZCTlcAA/bYXVT8gYCAAJ
« no previous file with comments | « third_party/WebKit/Source/wtf/Forward.h ('k') | third_party/WebKit/Source/wtf/build_config.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698