로딩중...
검색중...
일치하는것 없음
ttypeBase.inl
1#pragma once
2
3#include "meta/rtti/rtti.hpp"
5#include "meta/type/type.inl"
6
7namespace by {
8
9#define TEMPL template <typename T, typename S>
10#define ME ttypeBase<T, S>
11#define SUPER S
12
13 TEMPL ME::ttypeBase() { this->init(); }
14
15 TEMPL nbool ME::isTemplate() const {
16 static nbool inner = tifTemplate<T>::is;
17 return inner;
18 }
19
20 TEMPL nbool ME::isAbstract() const {
21 static nbool inner = !std::is_constructible<T>::value;
22 return inner;
23 }
24
25 TEMPL void* ME::make() const { return tinstanceMaker<T>::make(); }
26
27 TEMPL ncnt ME::size() const { return sizeof(T); }
28
29 TEMPL const type& ME::getSuper() const { return ttype<typename tadaptiveSuper<T>::super>::get(); }
30
31 TEMPL const nbool& ME::isInit() const {
32 static nbool inner = typeid(T) == typeid(adam);
33 return inner;
34 }
35
36 TEMPL const ME& ME::get() {
37 static ME* inner = nullptr;
38 if(!inner) {
39 inner = new ME(false);
40 inner->init();
41 }
42
43 return *inner;
44 }
45
46 TEMPL types& ME::_getSupers() {
47 static types inner;
48 return inner;
49 }
50
51 TEMPL types& ME::_getSubs() {
52 static types inner;
53 return inner;
54 }
55
56 TEMPL types** ME::_onGetLeafs() const {
57 static types* inner = nullptr;
58 return &inner;
59 }
60
61 TEMPL void ME::_onAddSubClass(const type& subClass) {
62 super::_onAddSubClass(subClass);
63
64 types** leafs = _onGetLeafs();
65 if(*leafs) this->_setLeafs(nullptr);
66 }
67
68 TEMPL type& ME::_getStatic() const { return const_cast<ME&>(get()); }
69
70 TEMPL const std::string& ME::_getNativeName() const {
71 static std::string inner = tnameGetter<T>::getName();
72 return inner;
73 }
74
75 TEMPL ME::ttypeBase(nbool) {}
76
77#undef TEMPL
78#undef ME
79#undef SUPER
80} // namespace by