1
0
mirror of https://github.com/borgesdan/xn65 synced 2024-12-29 21:54:47 +01:00

Correções em Type

This commit is contained in:
Danilo 2024-11-08 16:22:26 -03:00
parent 9ae4a5b8ca
commit 7d1533f18e
3 changed files with 26 additions and 30 deletions

View File

@ -1,22 +1,33 @@
#ifndef XNA_CSHARP_TYPE_HPP
#define XNA_CSHARP_TYPE_HPP
#include "../default.hpp"
#include "xna/helpers.hpp"
#include <map>
#include <memory>
#include <string>
#include <type_traits>
#include <typeinfo>
#include <map>
namespace xna {
class Type {
public:
constexpr String FullName() const { return fullName; }
constexpr std::string FullName() const { return fullName; }
constexpr bool IsClass() const { return isClass; }
constexpr bool IsEnum() const { return isEnum; }
constexpr bool IsValueType() const { return isValueType; }
constexpr bool IsPrimitive() const { return isPrimitive; }
constexpr bool IsPointer() const { return isPointer; }
size_t GetHashCode() const;
constexpr size_t GetHashCode() const {
size_t seed = 0;
XnaHelper::HashCombine(seed, fullName);
XnaHelper::HashCombine(seed, isClass);
XnaHelper::HashCombine(seed, isEnum);
XnaHelper::HashCombine(seed, isValueType);
XnaHelper::HashCombine(seed, isPrimitive);
return seed;
}
constexpr bool operator==(const Type& other) const {
return
@ -33,13 +44,13 @@ namespace xna {
}
template <class T>
friend sptr<Type> typeof();
friend std::shared_ptr<Type> typeof();
public:
inline static auto NameOfRegisteredTypes = std::map<std::string, sptr<Type>>();
inline static auto NameOfRegisteredTypes = std::map<std::string, std::shared_ptr<Type>>();
private:
String fullName;
std::string fullName;
bool isClass{ false };
bool isEnum{ false };
bool isValueType{ false };
@ -48,9 +59,9 @@ namespace xna {
};
template <class T>
inline sptr<Type> typeof() {
inline std::shared_ptr<Type> typeof() {
if (std::is_arithmetic<T>::value) {
auto primitiveType = snew<Type>();
auto primitiveType = std::make_shared<Type>();
primitiveType->fullName = typeid(T).name();
primitiveType->isPrimitive = true;
primitiveType->isValueType = true;
@ -58,7 +69,7 @@ namespace xna {
}
if (std::is_enum<T>::value) {
auto enumType = snew<Type>();
auto enumType = std::make_shared<Type>();
enumType->fullName = typeid(T).name();
enumType->isValueType = true;
enumType->isEnum = true;
@ -66,14 +77,14 @@ namespace xna {
}
if (std::is_pointer<T>::value) {
auto pointerType = snew<Type>();
auto pointerType = std::make_shared<Type>();
pointerType->fullName = typeid(T).name();
pointerType->isPointer = true;
return pointerType;
}
if (std::is_class<T>::value) {
auto classType = snew<Type>();
auto classType = std::make_shared<Type>();
classType->fullName = typeid(T).name();
classType->isClass = true;
@ -84,12 +95,12 @@ namespace xna {
}
template <class T>
inline sptr<Type> typeof(T const* object) {
inline std::shared_ptr<Type> typeof(T const* object) {
return typeof<T>();
}
template <class T>
inline sptr<Type> typeof(T const& object) {
inline std::shared_ptr<Type> typeof(T const& object) {
return typeof<T>();
}
}

View File

@ -6,7 +6,7 @@
add_library (Xn65 STATIC
"csharp/stream.cpp"
"csharp/binary.cpp"
"csharp/type.cpp"
"game/component.cpp"
"game/servicecontainer.cpp"
"content/manager.cpp"

View File

@ -1,15 +0,0 @@
#include "xna/csharp/type.hpp"
namespace xna {
size_t Type::GetHashCode() const
{
size_t seed = 0;
XnaHelper::HashCombine(seed, fullName);
XnaHelper::HashCombine(seed, isClass);
XnaHelper::HashCombine(seed, isEnum);
XnaHelper::HashCombine(seed, isValueType);
XnaHelper::HashCombine(seed, isPrimitive);
return seed;
}
}