From 9f78e2320face0aded921ae453f75db567546287 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Mon, 4 Mar 2019 21:22:35 -0600 Subject: [PATCH] [ox/std] Remove implicit signed/unsigned conversions --- deps/ox/src/ox/std/bitops.hpp | 4 ++- deps/ox/src/ox/std/error.hpp | 4 +-- deps/ox/src/ox/std/memops.cpp | 8 ++--- deps/ox/src/ox/std/memops.hpp | 4 +-- deps/ox/src/ox/std/string.hpp | 2 +- deps/ox/src/ox/std/strops.hpp | 12 +++---- deps/ox/src/ox/std/types.hpp | 10 ------ deps/ox/src/ox/std/typetraits.hpp | 54 +++++++++++++++++++++++-------- 8 files changed, 58 insertions(+), 40 deletions(-) diff --git a/deps/ox/src/ox/std/bitops.hpp b/deps/ox/src/ox/std/bitops.hpp index 187b67ae..ba0e0e21 100644 --- a/deps/ox/src/ox/std/bitops.hpp +++ b/deps/ox/src/ox/std/bitops.hpp @@ -8,10 +8,12 @@ #pragma once +#include "types.hpp" + namespace ox { template -[[nodiscard]] inline constexpr T rotateLeft(T i, int shift) { +[[nodiscard]] inline constexpr T rotateLeft(T i, std::size_t shift) { constexpr auto bits = sizeof(i) * 8; return (i << shift) | (i >> (bits - shift)); } diff --git a/deps/ox/src/ox/std/error.hpp b/deps/ox/src/ox/std/error.hpp index 62eb9b95..2daaed51 100644 --- a/deps/ox/src/ox/std/error.hpp +++ b/deps/ox/src/ox/std/error.hpp @@ -8,7 +8,7 @@ #pragma once -#include "types.hpp" +#include "typetraits.hpp" #ifdef DEBUG #define OxError(x) ox::_error(__FILE__, __LINE__, x) @@ -48,7 +48,7 @@ static constexpr Error _errorTags(Error line, Error errCode) { return errCode | line; } -static constexpr Error _error(const char *file, int line, Error errCode) { +static constexpr Error _error(const char *file, uint32_t line, Error errCode) { return errCode ? reinterpret_cast(file) | _errorTags(line, errCode) : 0; } diff --git a/deps/ox/src/ox/std/memops.cpp b/deps/ox/src/ox/std/memops.cpp index 9c847e65..39f3696d 100644 --- a/deps/ox/src/ox/std/memops.cpp +++ b/deps/ox/src/ox/std/memops.cpp @@ -24,18 +24,18 @@ int ox_memcmp(const void *ptr1, const void *ptr2, std::size_t size) noexcept { return retval; } -void *ox_memcpy(void *dest, const void *src, int64_t size) noexcept { +void *ox_memcpy(void *dest, const void *src, std::size_t size) noexcept { auto srcBuf = static_cast(src); auto dstBuf = static_cast(dest); - for (int64_t i = 0; i < size; i++) { + for (std::size_t i = 0; i < size; i++) { dstBuf[i] = static_cast(srcBuf[i]); } return dest; } -void *ox_memset(void *ptr, int val, int64_t size) noexcept { +void *ox_memset(void *ptr, int val, std::size_t size) noexcept { auto buf = static_cast(ptr); - for (int64_t i = 0; i < size; i++) { + for (std::size_t i = 0; i < size; i++) { buf[i] = val; } return ptr; diff --git a/deps/ox/src/ox/std/memops.hpp b/deps/ox/src/ox/std/memops.hpp index 1ad6775f..142aeb80 100644 --- a/deps/ox/src/ox/std/memops.hpp +++ b/deps/ox/src/ox/std/memops.hpp @@ -11,6 +11,6 @@ int ox_memcmp(const void *ptr1, const void *ptr2, std::size_t size) noexcept; -void *ox_memcpy(void *dest, const void *src, int64_t size) noexcept; +void *ox_memcpy(void *dest, const void *src, std::size_t size) noexcept; -void *ox_memset(void *ptr, int val, int64_t size) noexcept; +void *ox_memset(void *ptr, int val, std::size_t size) noexcept; diff --git a/deps/ox/src/ox/std/string.hpp b/deps/ox/src/ox/std/string.hpp index 49c3f51d..c4cf90dc 100644 --- a/deps/ox/src/ox/std/string.hpp +++ b/deps/ox/src/ox/std/string.hpp @@ -168,7 +168,7 @@ template constexpr std::size_t BString::len() const noexcept { std::size_t length = 0; for (std::size_t i = 0; i < buffLen; i++) { - uint8_t b = m_buff[i]; + uint8_t b = static_cast(m_buff[i]); if (b) { if ((b & 128) == 0) { // normal ASCII character length++; diff --git a/deps/ox/src/ox/std/strops.hpp b/deps/ox/src/ox/std/strops.hpp index cd4d14d1..8711872b 100644 --- a/deps/ox/src/ox/std/strops.hpp +++ b/deps/ox/src/ox/std/strops.hpp @@ -88,9 +88,9 @@ template return nullptr; } -[[nodiscard]] constexpr int ox_lastIndexOf(const char *str, int character, int maxLen = 0xFFFFFFFF) noexcept { +[[nodiscard]] constexpr int ox_lastIndexOf(const char *str, int character, std::size_t maxLen = 0xFFFFFFFF) noexcept { int retval = -1; - for (int i = 0; i < maxLen && str[i]; i++) { + for (std::size_t i = 0; i < maxLen && str[i]; i++) { if (str[i] == character) { retval = i; } @@ -98,9 +98,9 @@ template return retval; } -[[nodiscard]] constexpr int ox_lastIndexOf(char *str, int character, int maxLen = 0xFFFFFFFF) noexcept { +[[nodiscard]] constexpr int ox_lastIndexOf(char *str, int character, std::size_t maxLen = 0xFFFFFFFF) noexcept { int retval = -1; - for (int i = 0; i < maxLen && str[i]; i++) { + for (std::size_t i = 0; i < maxLen && str[i]; i++) { if (str[i] == character) { retval = i; } @@ -120,8 +120,8 @@ template return total; } -template -constexpr T ox_itoa(int64_t v, T str) noexcept { +template +constexpr T ox_itoa(Integer v, T str) noexcept { if (v) { auto mod = 1000000000000000000; constexpr auto base = 10; diff --git a/deps/ox/src/ox/std/types.hpp b/deps/ox/src/ox/std/types.hpp index cfedecf0..dafc54bf 100644 --- a/deps/ox/src/ox/std/types.hpp +++ b/deps/ox/src/ox/std/types.hpp @@ -8,8 +8,6 @@ #pragma once -#include "bitops.hpp" - #if __has_include() #include @@ -51,14 +49,6 @@ typedef uint32_t uintptr_t; #endif -namespace ox { - -template -constexpr auto MaxValue = onMask(); - -} - - namespace std { using nullptr_t = decltype(nullptr); diff --git a/deps/ox/src/ox/std/typetraits.hpp b/deps/ox/src/ox/std/typetraits.hpp index 910fff4e..34b20c8e 100644 --- a/deps/ox/src/ox/std/typetraits.hpp +++ b/deps/ox/src/ox/std/typetraits.hpp @@ -8,10 +8,13 @@ #pragma once -#include "types.hpp" +#include "bitops.hpp" namespace ox { +template +constexpr auto MaxValue = onMask(); + template struct integral_constant { @@ -60,23 +63,46 @@ struct enable_if { using type = T; }; + template -struct RemoveIndirection { - - private: - template - static constexpr ST decay(ST t) { - return t; - } +struct remove_pointer { + using type = T; +}; - template - static constexpr ST decay(ST *t) { - return decay(*t); - } +template +struct remove_pointer { + using type = T; +}; - public: - using type = decltype(decay(static_cast(nullptr))); +template +struct remove_pointer { + using type = T; +}; +template +struct remove_pointer { + using type = T; +}; + +template +struct remove_pointer { + using type = T; +}; + + +template +struct remove_reference { + using type = T; +}; + +template +struct remove_reference { + using type = T; +}; + +template +struct remove_reference { + using type = T; }; }