ObjWrapper.h 873 B

12345678910111213141516171819202122232425262728293031
  1. #ifndef __OBJWRAPPER
  2. #define __OBJWRAPPER
  3. #pragma once
  4. #define GcnewArray(TManage, var, Length) array<TManage>^ var = gcnew array<TManage>(Length);
  5. #define GcWrap(TManage, ptr) (ptr ? gcnew TManage(ptr) : nullptr)
  6. #define Unwrap(TManage) (TManage ? TManage->Ptr : NULL)
  7. #define Equatable(TManage, OPtr) \
  8. public: \
  9. static bool operator == (TManage^ x, TManage^ y) { \
  10. return Object::ReferenceEquals(x, y) || x && y && x->OPtr == y->OPtr; \
  11. } \
  12. static bool operator != (TManage ^ x, TManage ^ y) { \
  13. return !(x == y); \
  14. } \
  15. virtual bool Equals(TManage ^ other) { \
  16. return other && OPtr == other->OPtr; \
  17. } \
  18. virtual bool Equals(Object^ obj) override { \
  19. TManage ^ p; \
  20. return (p = dynamic_cast<TManage^>(obj)) && OPtr == p->OPtr; \
  21. } \
  22. virtual int GetHashCode() override { \
  23. return (int)(IntPtr)OPtr; \
  24. }
  25. #endif // !__OBJWRAPPER