瀏覽代碼

fixed size types

Kajetan Johannes Hammerle 3 年之前
父節點
當前提交
0ae3c7be3d
共有 2 個文件被更改,包括 44 次插入0 次删除
  1. 1 0
      Main.cpp
  2. 43 0
      utils/Types.h

+ 1 - 0
Main.cpp

@@ -14,6 +14,7 @@
 #include "tests/FrustumTests.h"
 #include "tests/QuaternionTests.h"
 #include "tests/UtilsTests.h"
+#include "utils/Types.h"
 
 int main() {
     ArrayTests::test();

+ 43 - 0
utils/Types.h

@@ -0,0 +1,43 @@
+#ifndef TYPES_H
+#define TYPES_H
+
+namespace Size {
+    namespace {
+
+        template<bool condition, typename IfTrue, typename IfFalse>
+        struct Conditional {
+            typedef IfTrue dummy;
+        };
+
+        template<typename IfTrue, typename IfFalse>
+        struct Conditional<false, IfTrue, IfFalse> {
+            typedef IfFalse dummy;
+        };
+
+        template<int N, typename A, typename B>
+        using SizeCheck = Conditional<sizeof (A) == N, A, B>;
+
+        template<int N>
+        using Signed = SizeCheck<N, long long,
+        typename SizeCheck<N, long,
+        typename SizeCheck<N, int,
+        typename SizeCheck<N, short, char>::dummy>::dummy>::dummy>;
+        
+        template<int N>
+        using Unsigned = SizeCheck<N, unsigned long long,
+        typename SizeCheck<N, unsigned long,
+        typename SizeCheck<N, unsigned int,
+        typename SizeCheck<N, unsigned short, unsigned char>::dummy>::dummy>::dummy>;
+    }
+}
+
+typedef Size::Signed<8>::dummy int64;
+typedef Size::Signed<4>::dummy int32;
+typedef Size::Signed<2>::dummy int16;
+typedef Size::Signed<1>::dummy int8;
+typedef Size::Unsigned<8>::dummy uint64;
+typedef Size::Unsigned<4>::dummy uint32;
+typedef Size::Unsigned<2>::dummy uint16;
+typedef Size::Unsigned<1>::dummy uint8;
+
+#endif