瀏覽代碼

AK: Add MakeSigned<T> helper template

Andreas Kling 5 年之前
父節點
當前提交
e90ecdda48
共有 1 個文件被更改,包括 55 次插入0 次删除
  1. 55 0
      AK/StdLibExtras.h

+ 55 - 0
AK/StdLibExtras.h

@@ -362,6 +362,60 @@ struct MakeUnsigned<unsigned long long> {
     typedef unsigned long long type;
     typedef unsigned long long type;
 };
 };
 
 
+template<typename T>
+struct MakeSigned {
+};
+
+template<>
+struct MakeSigned<char> {
+    typedef char type;
+};
+
+template<>
+struct MakeSigned<short> {
+    typedef short type;
+};
+
+template<>
+struct MakeSigned<int> {
+    typedef int type;
+};
+
+template<>
+struct MakeSigned<long> {
+    typedef long type;
+};
+
+template<>
+struct MakeSigned<long long> {
+    typedef long long type;
+};
+
+template<>
+struct MakeSigned<unsigned char> {
+    typedef char type;
+};
+
+template<>
+struct MakeSigned<unsigned short> {
+    typedef short type;
+};
+
+template<>
+struct MakeSigned<unsigned int> {
+    typedef int type;
+};
+
+template<>
+struct MakeSigned<unsigned long> {
+    typedef long type;
+};
+
+template<>
+struct MakeSigned<unsigned long long> {
+    typedef long long type;
+};
+
 template<typename T, typename U = T>
 template<typename T, typename U = T>
 inline constexpr T exchange(T& slot, U&& value)
 inline constexpr T exchange(T& slot, U&& value)
 {
 {
@@ -378,6 +432,7 @@ using AK::Conditional;
 using AK::exchange;
 using AK::exchange;
 using AK::forward;
 using AK::forward;
 using AK::IsSame;
 using AK::IsSame;
+using AK::MakeSigned;
 using AK::MakeUnsigned;
 using AK::MakeUnsigned;
 using AK::max;
 using AK::max;
 using AK::min;
 using AK::min;