/src/FreeImage/Source/DeprecationManager/DeprecationMgr.h

https://bitbucket.org/cabalistic/ogredeps/ · C++ Header · 83 lines · 46 code · 14 blank · 23 comment · 3 complexity · 44252a50c77d8850d9d62387e8085e38 MD5 · raw file

  1. // ==========================================================
  2. // Deprecation Manager
  3. //
  4. // Design and implementation by
  5. // - Noel Llopis (Game Programming Gems II)
  6. //
  7. // This file is part of FreeImage 3
  8. //
  9. // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
  10. // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
  11. // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
  12. // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
  13. // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
  14. // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
  15. // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
  16. // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
  17. // THIS DISCLAIMER.
  18. //
  19. // Use at your own risk!
  20. // ==========================================================
  21. #ifndef DEPRECATIONMGR_H
  22. #define DEPRECATIONMGR_H
  23. #ifdef _MSC_VER
  24. #pragma warning(disable : 4786 ) // identifier was truncated to 'number' characters
  25. #endif
  26. #include "Utilities.h"
  27. // ==========================================================
  28. #if !defined(_M_X64) && defined(_MSC_VER)
  29. #define DEPRECATE(a,b) \
  30. { \
  31. void *fptr; \
  32. _asm { mov fptr, ebp } \
  33. DeprecationMgr::GetInstance()->AddDeprecatedFunction(a, b, fptr); \
  34. }
  35. #elif defined(__i386__) && defined(__GNUC__)
  36. #define DEPRECATE(a,b) \
  37. { \
  38. void *fptr; \
  39. __asm__("movl %%ebp, %0" : "=m" (fptr)); \
  40. DeprecationMgr::GetInstance()->AddDeprecatedFunction(a, b, fptr); \
  41. }
  42. #else
  43. // default fallback case, which does not use the ebp register's content
  44. #define DEPRECATE(a,b) \
  45. { \
  46. void *fptr = NULL; \
  47. DeprecationMgr::GetInstance()->AddDeprecatedFunction(a, b, fptr); \
  48. }
  49. #endif
  50. // ==========================================================
  51. class DeprecationMgr {
  52. #if (_MSC_VER == 1100) // VC 5.0 need to look into the docs for the compiler for the value of each version
  53. public:
  54. #else
  55. private:
  56. #endif
  57. struct DeprecatedFunction {
  58. const char *old_function_name;
  59. const char *new_function_name;
  60. std::set<int> called_from;
  61. };
  62. std::map<const char *, DeprecatedFunction> m_functions;
  63. public:
  64. DeprecationMgr();
  65. ~DeprecationMgr();
  66. static DeprecationMgr * GetInstance ( void );
  67. void AddDeprecatedFunction(const char *old_function_name, const char *new_function_name, const void *frame_ptr);
  68. };
  69. #endif //DEPRECATIONMGR_H