[ox/std] Remove implicit signed/unsigned conversions

This commit is contained in:
Gary Talent 2019-03-04 21:22:35 -06:00
parent 40dac704d0
commit 9f78e2320f
8 changed files with 58 additions and 40 deletions

View File

@ -8,10 +8,12 @@
#pragma once
#include "types.hpp"
namespace ox {
template<typename T>
[[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));
}

View File

@ -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<uint64_t>(file) | _errorTags(line, errCode) : 0;
}

View File

@ -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<const char*>(src);
auto dstBuf = static_cast<char*>(dest);
for (int64_t i = 0; i < size; i++) {
for (std::size_t i = 0; i < size; i++) {
dstBuf[i] = static_cast<char>(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<char*>(ptr);
for (int64_t i = 0; i < size; i++) {
for (std::size_t i = 0; i < size; i++) {
buf[i] = val;
}
return ptr;

View File

@ -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;

View File

@ -168,7 +168,7 @@ template<std::size_t buffLen>
constexpr std::size_t BString<buffLen>::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<uint8_t>(m_buff[i]);
if (b) {
if ((b & 128) == 0) { // normal ASCII character
length++;

View File

@ -88,9 +88,9 @@ template<typename T1, typename T2>
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<typename T1, typename T2>
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<typename T1, typename T2>
return total;
}
template<typename T>
constexpr T ox_itoa(int64_t v, T str) noexcept {
template<typename Integer, typename T>
constexpr T ox_itoa(Integer v, T str) noexcept {
if (v) {
auto mod = 1000000000000000000;
constexpr auto base = 10;

View File

@ -8,8 +8,6 @@
#pragma once
#include "bitops.hpp"
#if __has_include(<cstdint>)
#include <cstdint>
@ -51,14 +49,6 @@ typedef uint32_t uintptr_t;
#endif
namespace ox {
template<typename T>
constexpr auto MaxValue = onMask<T>();
}
namespace std {
using nullptr_t = decltype(nullptr);

View File

@ -8,10 +8,13 @@
#pragma once
#include "types.hpp"
#include "bitops.hpp"
namespace ox {
template<typename T>
constexpr auto MaxValue = onMask<T>();
template<class T, T v>
struct integral_constant {
@ -60,23 +63,46 @@ struct enable_if<true, T> {
using type = T;
};
template<typename T>
struct RemoveIndirection {
private:
template<typename ST>
static constexpr ST decay(ST t) {
return t;
}
struct remove_pointer {
using type = T;
};
template<typename ST>
static constexpr ST decay(ST *t) {
return decay(*t);
}
template<typename T>
struct remove_pointer<T*> {
using type = T;
};
public:
using type = decltype(decay(static_cast<T*>(nullptr)));
template<typename T>
struct remove_pointer<T* const> {
using type = T;
};
template<typename T>
struct remove_pointer<T* volatile> {
using type = T;
};
template<typename T>
struct remove_pointer<T* const volatile> {
using type = T;
};
template<typename T>
struct remove_reference {
using type = T;
};
template<typename T>
struct remove_reference<T&> {
using type = T;
};
template<typename T>
struct remove_reference<T&&> {
using type = T;
};
}