com_ptr.inl - Engine C API Reference

com_ptr.inl
  1. namespace stingray_plugin_foundation {
  2. #if defined(WINDOWSPC) || defined(XBOXONE)
  3. template<typename T>
  4. ComPtr<T>::ComPtr(T* ptr = 0) : _owned(true), _ptr(ptr) {
  5. }
  6. template<typename T>
  7. ComPtr<T>::ComPtr(const ComPtr<T>& rhs) : _owned(rhs._owned), _ptr(rhs.abandon()) {
  8. }
  9. template<typename T>
  10. ComPtr<T>::~ComPtr() {
  11. if(_owned && _ptr) {
  12. _ptr->Release();
  13. }
  14. }
  15. template<typename T>
  16. ComPtr<T>& ComPtr<T>::operator=(const ComPtr<T>& rhs) {
  17. if( this != &rhs ) {
  18. if( _ptr != rhs.get() && _owned && _ptr)
  19. _ptr->Release();
  20. _owned = rhs._owned;
  21. _ptr = rhs.abandon();
  22. }
  23. return *this;
  24. }
  25. template<typename T>
  26. T& ComPtr<T>::operator*() const {
  27. return *get();
  28. }
  29. template<typename T>
  30. T* ComPtr<T>::operator->() const {
  31. return get();
  32. }
  33. template<typename T>
  34. T* ComPtr<T>::get() const {
  35. return _ptr;
  36. }
  37. template<typename T>
  38. T* ComPtr<T>::abandon() const {
  39. _owned=false;
  40. return _ptr;
  41. }
  42. template<typename T>
  43. T** ComPtr<T>::init_ptr() {
  44. if(_owned && _ptr)
  45. _ptr->Release();
  46. _ptr=0;
  47. _owned=true;
  48. return &_ptr;
  49. }
  50. #endif
  51. }