OpaqueUserData.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /********************************************************************
  2. created: 2003/02/14
  3. file base: OpaqueUserData
  4. file ext: h
  5. author: liupeng
  6. purpose:
  7. *********************************************************************/
  8. #ifndef __INCLUDE_OPAQUEUSERDATA_H__
  9. #define __INCLUDE_OPAQUEUSERDATA_H__
  10. #if defined (_MSC_VER) && (_MSC_VER >= 1020)
  11. #pragma once
  12. #endif
  13. /*
  14.  * Define Win64 interfaces if not already defined
  15.  */
  16. /*
  17.  * InterlockedExchangePointer
  18.  */
  19. #ifndef InterlockedExchangePointer
  20. #define InterlockedExchangePointer(Target, Value) 
  21. (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value))
  22. #endif 
  23. /*
  24.  * namespace OnlineGameLib
  25.  */
  26. namespace OnlineGameLib {
  27. class COpaqueUserData 
  28. {
  29. public:
  30. /*
  31.  * Attempted to take the address of a non-lvalue
  32.  */
  33. void *GetUserPtr() const
  34. {
  35. return InterlockedExchangePointer( &(const_cast<void *>(m_pUserData)), m_pUserData );
  36. }
  37. /*
  38.  * Ignoring return value of function 
  39.  * Expected void type, assignment, increment or decrement
  40.  */
  41. void SetUserPtr(void *pData)
  42. {
  43. InterlockedExchangePointer( &m_pUserData, pData );
  44. }
  45. unsigned long GetUserData() const
  46. {
  47. return reinterpret_cast<unsigned long>( GetUserPtr() );
  48. }
  49. void SetUserData( unsigned long data )
  50. {
  51. SetUserPtr( reinterpret_cast<void *>( data ) );
  52. }
  53. protected:
  54. COpaqueUserData() : m_pUserData(0)
  55. {
  56. }
  57. ~COpaqueUserData()
  58. {
  59. m_pUserData = 0;
  60. }
  61. private:
  62. void *m_pUserData;
  63. /*
  64.  * No copies do not implement
  65.  */
  66. COpaqueUserData( const COpaqueUserData &rhs );
  67. COpaqueUserData &operator=( const COpaqueUserData &rhs );
  68. };
  69. } // End of namespace OnlineGameLib
  70. #endif //__INCLUDE_OPAQUEUSERDATA_H__