BsMonoClass.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #pragma once
  2. #include "BsMonoPrerequisites.h"
  3. #include <mono/jit/jit.h>
  4. namespace BansheeEngine
  5. {
  6. class BS_MONO_EXPORT MonoClass
  7. {
  8. struct MethodId
  9. {
  10. struct Hash
  11. {
  12. inline size_t operator()(const MethodId& v) const;
  13. };
  14. struct Equals
  15. {
  16. inline bool operator()(const MethodId &a, const MethodId &b) const;
  17. };
  18. MethodId(const CM::String& name, CM::UINT32 numParams);
  19. CM::String name;
  20. CM::UINT32 numParams;
  21. };
  22. public:
  23. ~MonoClass();
  24. MonoMethod& getMethod(const CM::String& name, CM::UINT32 numParams = 0);
  25. MonoField& getField(const CM::String& name);
  26. MonoProperty& getProperty(const CM::String& name);
  27. bool hasField(const CM::String& name) const;
  28. MonoObject* invokeMethod(const CM::String& name, MonoObject* instance = nullptr, void** params = nullptr, CM::UINT32 numParams = 0);
  29. void addInternalCall(const CM::String& name, const void* method);
  30. MonoObject* createInstance() const;
  31. private:
  32. friend class MonoAssembly;
  33. MonoClass(const CM::String& fullName, ::MonoClass* monoClass, MonoAssembly* parentAssembly);
  34. MonoAssembly* mParentAssembly;
  35. ::MonoClass* mClass;
  36. CM::String mFullName;
  37. CM::UnorderedMap<MethodId, MonoMethod*, MethodId::Hash, MethodId::Equals>::type mMethods;
  38. CM::UnorderedMap<CM::String, MonoField*>::type mFields;
  39. CM::UnorderedMap<CM::String, MonoProperty*>::type mProperties;
  40. };
  41. }