dump_allocator.h
上传用户:kx_jwh
上传日期:2021-09-03
资源大小:76k
文件大小:3k
源码类别:

STL

开发平台:

Visual C++

  1. /* vim: set tabstop=4 : */
  2. #ifndef __febird_io_dump_allocator_h__
  3. #define __febird_io_dump_allocator_h__
  4. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  5. # pragma once
  6. #endif
  7. namespace febird {
  8. /**
  9.  @brief only a proxy, for template typename dispatch
  10.  */
  11. template<class BaseAlloc>
  12. class dump_allocator : public BaseAlloc
  13. {
  14. public:
  15. typedef BaseAlloc _MySuper;
  16. typedef typename BaseAlloc::value_type value_type;
  17. typedef typename BaseAlloc::pointer pointer;
  18. typedef typename BaseAlloc::reference reference;
  19. typedef typename BaseAlloc::const_pointer   const_pointer;
  20. typedef typename BaseAlloc::const_reference const_reference;
  21. typedef typename BaseAlloc::size_type size_type;
  22. typedef typename BaseAlloc::difference_type difference_type;
  23. template<class _Other>
  24. struct rebind
  25. { // convert an dump_allocator<BaseAlloc> to an dump_allocator <_Other>
  26. private:
  27. typedef typename BaseAlloc::template rebind<_Other>::other BaseRebind;
  28. public:
  29. typedef dump_allocator<BaseRebind> other;
  30. };
  31. dump_allocator()
  32. { // construct default dump_allocator (do nothing)
  33. }
  34. dump_allocator(const dump_allocator<_Ty>& rhs)
  35. : BaseAlloc(rhs)
  36. { // construct by copying (do nothing)
  37. }
  38. template<class _Other>
  39. dump_allocator(const dump_allocator<_Other>& other)
  40. : BaseAlloc(static_cast<const typename dump_allocator<_Other>::_MySuper&>(other))
  41. { // construct from a related dump_allocator (do nothing)
  42. }
  43. template<class _Other>
  44. dump_allocator<_Ty>& operator=(const dump_allocator<_Other>& other)
  45. { // assign from a related dump_allocator (do nothing)
  46. typedef typename dump_allocator<_Other>::_MySuper _OtherSuper;
  47. BaseAlloc::operator=(static_cast<const _OtherSuper&>(other));
  48. return (*this);
  49. }
  50. };
  51. // dump_allocator TEMPLATE OPERATORS
  52. template<class _Ty, class _Other> inline
  53. bool operator==(const dump_allocator<_Ty>& l, const dump_allocator<_Other>& r)
  54. { // test for dump_allocator equality (always true)
  55. typedef typename dump_allocator<_Ty>::_MySuper _MySuper;
  56. typedef typename dump_allocator<_Other>::_MySuper _HeSuper;
  57. return static_cast<const _MySuper&>(l) == static_cast<const _HeSuper&>(r);
  58. }
  59. template<class _Ty, class _Other> inline
  60. bool operator!=(const dump_allocator<_Ty>& l, const dump_allocator<_Other>& r)
  61. { // test for dump_allocator inequality (always false)
  62. typedef typename dump_allocator<_Ty>::_MySuper _MySuper;
  63. typedef typename dump_allocator<_Other>::_MySuper _HeSuper;
  64. return static_cast<const _MySuper&>(l) != static_cast<const _HeSuper&>(r);
  65. }
  66. } // namespace febird
  67. #endif // __febird_io_dump_allocator_h__