[libc-commits] [PATCH] D83980: [libc][NFC] Use RemoveCVType to implement IsIntegral and IsPointerType.

Siva Chandra via Phabricator via libc-commits libc-commits at lists.llvm.org
Fri Jul 17 11:42:56 PDT 2020


This revision was automatically updated to reflect the committed changes.
Closed by commit rG7738c0341829: [libc][NFC] Use RemoveCVType to implement IsIntegral and IsPointerType. (authored by sivachandra).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83980/new/

https://reviews.llvm.org/D83980

Files:
  libc/utils/CPP/TypeTraits.h


Index: libc/utils/CPP/TypeTraits.h
===================================================================
--- libc/utils/CPP/TypeTraits.h
+++ libc/utils/CPP/TypeTraits.h
@@ -26,27 +26,12 @@
   static constexpr bool Value = false;
 };
 
-template <typename Type> struct IsIntegral : public FalseValue {};
-template <> struct IsIntegral<char> : public TrueValue {};
-template <> struct IsIntegral<signed char> : public TrueValue {};
-template <> struct IsIntegral<unsigned char> : public TrueValue {};
-template <> struct IsIntegral<short> : public TrueValue {};
-template <> struct IsIntegral<unsigned short> : public TrueValue {};
-template <> struct IsIntegral<int> : public TrueValue {};
-template <> struct IsIntegral<unsigned int> : public TrueValue {};
-template <> struct IsIntegral<long> : public TrueValue {};
-template <> struct IsIntegral<unsigned long> : public TrueValue {};
-template <> struct IsIntegral<long long> : public TrueValue {};
-template <> struct IsIntegral<unsigned long long> : public TrueValue {};
-template <> struct IsIntegral<bool> : public TrueValue {};
-
-template <typename T> struct IsPointerType : public FalseValue {};
-template <typename T> struct IsPointerType<T *> : public TrueValue {};
+template <typename T> struct TypeIdentity { typedef T Type; };
 
 template <typename T1, typename T2> struct IsSame : public FalseValue {};
 template <typename T> struct IsSame<T, T> : public TrueValue {};
-
-template <typename T> struct TypeIdentity { typedef T Type; };
+template <typename T1, typename T2>
+static constexpr bool IsSameV = IsSame<T1, T2>::Value;
 
 template <typename T> struct RemoveCV : public TypeIdentity<T> {};
 template <typename T> struct RemoveCV<const T> : public TypeIdentity<T> {};
@@ -56,10 +41,28 @@
 
 template <typename T> using RemoveCVType = typename RemoveCV<T>::Type;
 
+template <typename Type> struct IsIntegral {
+  using TypeNoCV = RemoveCVType<Type>;
+  static constexpr bool Value =
+      IsSameV<char, TypeNoCV> || IsSameV<signed char, TypeNoCV> ||
+      IsSameV<unsigned char, TypeNoCV> || IsSameV<short, TypeNoCV> ||
+      IsSameV<unsigned short, TypeNoCV> || IsSameV<int, TypeNoCV> ||
+      IsSameV<unsigned int, TypeNoCV> || IsSameV<long, TypeNoCV> ||
+      IsSameV<unsigned long, TypeNoCV> || IsSameV<long long, TypeNoCV> ||
+      IsSameV<unsigned long long, TypeNoCV> || IsSameV<bool, TypeNoCV>;
+};
+
+template <typename T> struct IsPointerTypeNoCV : public FalseValue {};
+template <typename T> struct IsPointerTypeNoCV<T *> : public TrueValue {};
+template <typename T> struct IsPointerType {
+  static constexpr bool Value = IsPointerTypeNoCV<RemoveCVType<T>>::Value;
+};
+
 template <typename Type> struct IsFloatingPointType {
-  static constexpr bool Value = IsSame<float, RemoveCVType<Type>>::Value ||
-                                IsSame<double, RemoveCVType<Type>>::Value ||
-                                IsSame<long double, RemoveCVType<Type>>::Value;
+  using TypeNoCV = RemoveCVType<Type>;
+  static constexpr bool Value = IsSame<float, TypeNoCV>::Value ||
+                                IsSame<double, TypeNoCV>::Value ||
+                                IsSame<long double, TypeNoCV>::Value;
 };
 
 } // namespace cpp


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83980.278872.patch
Type: text/x-patch
Size: 3224 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20200717/0ce94029/attachment-0001.bin>


More information about the libc-commits mailing list