clean-up
This commit is contained in:
parent
d1dddd8758
commit
654c74d5db
3 changed files with 10 additions and 13 deletions
|
@ -7,8 +7,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||||
add_compile_options(-stdlib=libc++)
|
|
||||||
add_compile_options(-Wall -Wextra -pedantic-errors)
|
add_compile_options(-Wall -Wextra -pedantic-errors)
|
||||||
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
add_compile_options(/W4)
|
add_compile_options(/W4)
|
||||||
check_cxx_compiler_flag(/permissive HAS_PERMISSIVE_FLAG)
|
check_cxx_compiler_flag(/permissive HAS_PERMISSIVE_FLAG)
|
||||||
|
|
|
@ -86,7 +86,7 @@ int main() {
|
||||||
#if (__cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSC_VER >= 1910 && _MSVC_LANG >= 201402L))
|
#if (__cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSC_VER >= 1910 && _MSVC_LANG >= 201402L))
|
||||||
// Compile-time supported by C++14.
|
// Compile-time supported by C++14.
|
||||||
constexpr auto constexpr_work_fine = NAMEOF(somevar);
|
constexpr auto constexpr_work_fine = NAMEOF(somevar);
|
||||||
std::cout << constexpr_work_fine << std::endl; // somevar
|
static_assert(constexpr_work_fine == "somevar", "");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Enum name.
|
// Enum name.
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <limits>
|
#include <string>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
||||||
#if (__cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSC_VER >= 1910 && _MSVC_LANG >= 201402L))
|
#if (__cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSC_VER >= 1910 && _MSVC_LANG >= 201402L))
|
||||||
|
@ -59,6 +59,10 @@ struct remove_all_pointers
|
||||||
template <typename T>
|
template <typename T>
|
||||||
using Decay = std::remove_reference<typename std::remove_cv<typename remove_all_pointers<T>::type>::type>;
|
using Decay = std::remove_reference<typename std::remove_cv<typename remove_all_pointers<T>::type>::type>;
|
||||||
|
|
||||||
|
inline constexpr bool StrEquals(const char* lhs, const char* rhs, std::size_t size) {
|
||||||
|
return size == 0 ? (lhs[0] == rhs[0]) : ((lhs[size - 1] == rhs[size - 1]) && StrEquals(lhs, rhs, size - 1));
|
||||||
|
}
|
||||||
|
|
||||||
// STD like compile-time string.
|
// STD like compile-time string.
|
||||||
class cstring final {
|
class cstring final {
|
||||||
const char* str_;
|
const char* str_;
|
||||||
|
@ -83,8 +87,6 @@ class cstring final {
|
||||||
|
|
||||||
inline constexpr std::size_t length() const noexcept { return size_; }
|
inline constexpr std::size_t length() const noexcept { return size_; }
|
||||||
|
|
||||||
inline constexpr std::size_t max_size() const noexcept { return std::numeric_limits<decltype(size_)>::max(); }
|
|
||||||
|
|
||||||
inline constexpr bool empty() const noexcept { return size_ == 0; }
|
inline constexpr bool empty() const noexcept { return size_ == 0; }
|
||||||
|
|
||||||
inline constexpr const char* begin() const noexcept { return str_; }
|
inline constexpr const char* begin() const noexcept { return str_; }
|
||||||
|
@ -116,7 +118,7 @@ class cstring final {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend constexpr bool operator==(const cstring& lhs, const cstring& rhs) noexcept {
|
inline friend constexpr bool operator==(const cstring& lhs, const cstring& rhs) noexcept {
|
||||||
return (lhs.size_ == rhs.size_) && equals(lhs.begin(), rhs.begin(), lhs.size());
|
return (lhs.size_ == rhs.size_) && StrEquals(lhs.begin(), rhs.begin(), lhs.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend constexpr bool operator!=(const cstring& lhs, const cstring& rhs) noexcept {
|
inline friend constexpr bool operator!=(const cstring& lhs, const cstring& rhs) noexcept {
|
||||||
|
@ -125,12 +127,12 @@ class cstring final {
|
||||||
|
|
||||||
template <std::size_t N>
|
template <std::size_t N>
|
||||||
inline friend constexpr bool operator==(const cstring& lhs, const char(&str)[N]) noexcept {
|
inline friend constexpr bool operator==(const cstring& lhs, const char(&str)[N]) noexcept {
|
||||||
return lhs == cstring{str, N - 1};
|
return (lhs.size_ == N - 1) && StrEquals(lhs.begin(), str, lhs.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t N>
|
template <std::size_t N>
|
||||||
inline friend constexpr bool operator!=(const cstring& lhs, const char(&str)[N]) noexcept {
|
inline friend constexpr bool operator!=(const cstring& lhs, const char(&str)[N]) noexcept {
|
||||||
return lhs != cstring{str, N - 1};
|
return !(lhs == str);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend std::ostream& operator<<(std::ostream& os, const cstring& str) {
|
inline friend std::ostream& operator<<(std::ostream& os, const cstring& str) {
|
||||||
|
@ -139,11 +141,6 @@ class cstring final {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline operator std::string() const { return std::string(begin(), size()); }
|
inline operator std::string() const { return std::string(begin(), size()); }
|
||||||
|
|
||||||
private:
|
|
||||||
static inline constexpr bool equals(const char* lhs, const char* rhs, std::size_t size) {
|
|
||||||
return size == 0 ? (lhs[0] == rhs[0]) : ((lhs[size - 1] == rhs[size - 1]) && equals(lhs, rhs, size - 1));
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline constexpr bool IsLexeme(char s) noexcept {
|
inline constexpr bool IsLexeme(char s) noexcept {
|
||||||
|
|
Loading…
Reference in a new issue