Skip to content

Commit d14cdb5

Browse files
committed
use UTemplate
1 parent 77b137f commit d14cdb5

31 files changed

+132
-285
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
resources/
22
build/
3+
vs_build/
34
lib/
45
.vs/
56
_deps/

CMakeLists.txt

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
22

3-
project(USRefl VERSION 0.7.2)
3+
project(USRefl VERSION 0.8.0)
44
message(STATUS "[Project] ${PROJECT_NAME}")
55

66
include(cmake/InitUCMake.cmake)
@@ -15,22 +15,12 @@ if(Ubpa_USRefl_Build_AutoRefl)
1515
Ubpa_AddDep(UANTLR 0.2.0)
1616
endif()
1717

18-
set(OptionCPM "")
19-
20-
option(Ubpa_USRefl_UseNameof "use nameof" OFF)
21-
if(Ubpa_USRefl_UseNameof)
22-
set(OptionCPM "CPM")
23-
CPMAddPackage(
24-
NAME nameof
25-
GITHUB_REPOSITORY Neargye/nameof
26-
GIT_TAG 0e8bec0
27-
)
28-
endif()
18+
Ubpa_AddDep(UTemplate 0.5.2)
2919

3020
Ubpa_AddSubDirsRec(include)
3121
Ubpa_AddSubDirsRec(src)
3222

33-
set(installFiles "cmake/InitUCMake.cmake")
23+
set(installFiles "")
3424
if(Ubpa_USRefl_Build_AutoRefl)
3525
list(APPEND installFiles "cmake/UbpaUSReflAutoRefl.cmake")
3626
endif()
@@ -43,8 +33,6 @@ install(
4333

4434
Ubpa_Export(
4535
TARGET
46-
${OptionCPM}
4736
DIRECTORIES
4837
"include"
49-
"cmake"
5038
)

include/USRefl/Attr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Ubpa::USRefl {
1111
template<typename Name, typename T>
1212
struct Attr;
1313

14-
template<typename Name, typename Char, size_t N>
14+
template<typename Name, typename Char, std::size_t N>
1515
Attr(Name, const Char(&)[N])->Attr<Name, std::basic_string_view<Char>>;
1616

1717
template<typename Name>

include/USRefl/ElemList.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Ubpa::USRefl {
99
template<typename... Elems>
1010
struct ElemList {
1111
std::tuple<Elems...> elems;
12-
static constexpr size_t size = sizeof...(Elems);
12+
static constexpr std::size_t size = sizeof...(Elems);
1313

1414
constexpr ElemList(Elems... elems) : elems{ elems... } {}
1515

@@ -20,13 +20,13 @@ namespace Ubpa::USRefl {
2020
constexpr void ForEach(Func&& func) const;
2121

2222
template<typename Func>
23-
constexpr size_t FindIf(Func&& func) const;
23+
constexpr std::size_t FindIf(Func&& func) const;
2424

2525
template<typename Name>
2626
constexpr const auto& Find(Name = {}) const;
2727

2828
template<typename T>
29-
constexpr size_t FindValue(const T& value) const;
29+
constexpr std::size_t FindValue(const T& value) const;
3030

3131
template<typename T, typename Str>
3232
constexpr const T* ValuePtrOfName(Str name) const;
@@ -40,7 +40,7 @@ namespace Ubpa::USRefl {
4040
template<typename Name>
4141
static constexpr bool Contains(Name = {});
4242

43-
template<size_t N>
43+
template<std::size_t N>
4444
constexpr const auto& Get() const;
4545

4646
template<typename Elem>

include/USRefl/NamedValue.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include "TStr.h"
3+
#include <UTemplate/TStr.h>
44

55
#include <string_view>
66

@@ -9,18 +9,24 @@ namespace Ubpa::USRefl {
99
struct NamedValue;
1010

1111
template<typename Name, typename T>
12-
struct NamedValueBase : Name {
12+
struct NamedValueBase {
1313
static_assert(IsTStr<Name>::value);
1414

15+
static constexpr std::string_view name = Name::value;
1516
static constexpr bool has_value = !std::is_void_v<T>;
1617

18+
template<typename Str>
19+
static constexpr bool NameIs(Str = {}) noexcept {
20+
return std::is_same_v<Str, Name>;
21+
}
22+
1723
template<typename U>
18-
static constexpr bool ValueTypeIs() {
24+
static constexpr bool ValueTypeIs() noexcept {
1925
return std::is_same_v<T, U>;
2026
}
2127

2228
template<typename U>
23-
static constexpr bool ValueTypeIsSameWith(U) {
29+
static constexpr bool ValueTypeIsSameWith(U) noexcept {
2430
return ValueTypeIs<U>();
2531
}
2632
};

include/USRefl/TStr.h

Lines changed: 0 additions & 37 deletions
This file was deleted.

include/USRefl/TypeInfoBase.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@
22

33
#include "BaseList.h"
44

5-
#ifdef UBPA_USREFL_USE_NAMEOF
6-
#include <nameof.hpp>
7-
#endif
5+
#include <UTemplate/Name.h>
86

97
namespace Ubpa::USRefl {
108
template<typename T, typename... Bases>
119
struct TypeInfoBase {
1210
using Type = T;
13-
#ifdef UBPA_USREFL_USE_NAMEOF
14-
static constexpr std::string_view name = nameof::nameof_type<T>();
15-
#endif
11+
static constexpr std::string_view name = type_name<T>().value;
1612
static constexpr BaseList bases = { Bases{}... };
1713

1814
template<typename Derived>

include/USRefl/config.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
#pragma once
22

3-
#ifndef UBPA_USREFL_NOT_USE_NAMEOF
4-
#define UBPA_USREFL_USE_NAMEOF
5-
#endif
6-
73
// AutoRefl will use these names
84
namespace UMeta {
95
static constexpr char nameof_namespace[] = "UMeta";

include/USRefl/detail/ElemList.inl

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include <array>
66

77
namespace Ubpa::USRefl::detail {
8-
template<typename List, typename Func, typename Acc, size_t... Ns, bool... masks>
8+
template<typename List, typename Func, typename Acc, std::size_t... Ns, bool... masks>
99
constexpr auto Accumulate(const List& list, Func&& func, Acc acc, std::index_sequence<Ns...>, std::integer_sequence<bool, masks...>) {
1010
if constexpr (sizeof...(Ns) > 0) {
1111
using IST_N = IntegerSequenceTraits<std::index_sequence<Ns...>>;
@@ -44,15 +44,15 @@ namespace Ubpa::USRefl::detail {
4444
return acc;
4545
}
4646

47-
template<typename List, typename Func, size_t... Ns>
48-
constexpr size_t FindIf(const List& list, Func&& func, std::index_sequence<Ns...>) {
47+
template<typename List, typename Func, std::size_t... Ns>
48+
constexpr std::size_t FindIf(const List& list, Func&& func, std::index_sequence<Ns...>) {
4949
if constexpr (sizeof...(Ns) > 0) {
5050
using IST = IntegerSequenceTraits<std::index_sequence<Ns...>>;
5151
return std::forward<Func>(func)(list.template Get<IST::head>()) ?
5252
IST::head : FindIf(list, std::forward<Func>(func), IST::tail);
5353
}
5454
else
55-
return static_cast<size_t>(-1);
55+
return static_cast<std::size_t>(-1);
5656
}
5757
}
5858

@@ -80,28 +80,32 @@ namespace Ubpa::USRefl {
8080

8181
template<typename... Elems>
8282
template<typename Func>
83-
constexpr size_t ElemList<Elems...>::FindIf(Func&& func) const {
83+
constexpr std::size_t ElemList<Elems...>::FindIf(Func&& func) const {
8484
return detail::FindIf(*this, std::forward<Func>(func), std::make_index_sequence<size>{});
8585
}
8686

8787
template<typename... Elems>
8888
template<typename Name>
8989
constexpr const auto& ElemList<Elems...>::Find(Name) const {
90-
constexpr size_t idx = []() {
91-
constexpr std::array names{ Elems::name... };
92-
for (size_t i = 0; i < names.size(); i++) {
93-
if (Name::name == names[i])
94-
return i;
95-
}
96-
return static_cast<size_t>(-1);
97-
}();
98-
static_assert(idx != static_cast<size_t>(-1));
99-
return Get<idx>();
90+
if constexpr (sizeof...(Elems) > 0) {
91+
constexpr std::size_t idx = []() {
92+
constexpr std::array names{ Elems::name... };
93+
for (std::size_t i = 0; i < names.size(); i++) {
94+
if (Name::value == names[i])
95+
return i;
96+
}
97+
return static_cast<std::size_t>(-1);
98+
}();
99+
static_assert(idx != static_cast<std::size_t>(-1));
100+
return Get<idx>();
101+
}
102+
else
103+
return static_cast<std::size_t>(-1);
100104
}
101105

102106
template<typename... Elems>
103107
template<typename T>
104-
constexpr size_t ElemList<Elems...>::FindValue(const T& value) const {
108+
constexpr std::size_t ElemList<Elems...>::FindValue(const T& value) const {
105109
return FindIf([&value](const auto& e) { return e.value == value; });
106110
}
107111

@@ -152,7 +156,7 @@ namespace Ubpa::USRefl {
152156
}
153157

154158
template<typename... Elems>
155-
template<size_t N>
159+
template<std::size_t N>
156160
constexpr const auto& ElemList<Elems...>::Get() const {
157161
return std::get<N>(elems);
158162
}

include/USRefl/detail/TStr.inl

Lines changed: 0 additions & 37 deletions
This file was deleted.

include/USRefl/detail/TypeInfoBase.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ namespace Ubpa::USRefl {
4949
});
5050
}
5151

52-
template<size_t Depth, typename T, typename Acc, typename Func>
52+
template<std::size_t Depth, typename T, typename Acc, typename Func>
5353
constexpr auto detail_DFS_Acc(T type, Acc&& acc, Func&& func) {
5454
return type.bases.Accumulate(std::forward<Acc>(acc), [&](auto&& acc, auto base) {
5555
if constexpr (base.is_virtual) {
@@ -84,7 +84,7 @@ namespace Ubpa::USRefl {
8484
template<typename T, typename... Bases>
8585
template<typename Func>
8686
constexpr void TypeInfoBase<T, Bases...>::DFS_ForEach(Func&& func) {
87-
DFS_Acc(0, [&](auto, auto t, size_t depth) {
87+
DFS_Acc(0, [&](auto, auto t, std::size_t depth) {
8888
std::forward<Func>(func)(t, depth);
8989
return 0;
9090
});

include/USRefl/detail/Util.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Ubpa::USRefl::detail {
1313

1414
template<typename T, T N0, T... Ns>
1515
struct IntegerSequenceTraits<std::integer_sequence<T, N0, Ns...>> {
16-
static constexpr size_t head = N0;
16+
static constexpr std::size_t head = N0;
1717
static constexpr auto tail = std::integer_sequence<T, Ns...>{};
1818
};
1919

0 commit comments

Comments
 (0)