AdskDMgr.h
上传用户:rundaa
上传日期:2009-05-24
资源大小:44k
文件大小:3k
源码类别:

CAD

开发平台:

Visual C++

  1. // (C) Copyright 1990-1999 by Autodesk, Inc. 
  2. //
  3. // Permission to use, copy, modify, and distribute this software in
  4. // object code form for any purpose and without fee is hereby granted, 
  5. // provided that the above copyright notice appears in all copies and 
  6. // that both that copyright notice and the limited warranty and
  7. // restricted rights notice below appear in all supporting 
  8. // documentation.
  9. //
  10. // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. 
  11. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
  12. // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC. 
  13. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
  14. // UNINTERRUPTED OR ERROR FREE.
  15. //
  16. // Use, duplication, or disclosure by the U.S. Government is subject to 
  17. // restrictions set forth in FAR 52.227-19 (Commercial Computer
  18. // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
  19. // (Rights in Technical Data and Computer Software), as applicable.
  20. #ifndef _ADSKDMGR_H_
  21. #define _ADSKDMGR_H_ 1
  22. #include "acdocman.h"
  23. // Defines
  24. //     #pragma warning(disable: 4786)
  25. // in your precompiled header to get rid of this warning
  26. // 'DEBUG workaround' prevents the #include <map> statement in AdskDMgr.h
  27. // from pulling in "use_ansi.h" that would force the debug CRT through 
  28. // #pragma-s.
  29. #if defined(_DEBUG) && (defined (_AFXDLL) || !defined (_WINDLL))
  30. // The result of the above line is that arx/dbx application statically linked 
  31. // to MFC will  use the debug version of the c++ runtime, all other 
  32. // configurations will use the release version.
  33. #define _DMGR_DEBUG_WAS_DEFINED
  34. #undef _DEBUG
  35. #define NDEBUG
  36. #endif
  37. #include <map>
  38. #ifdef _DMGR_DEBUG_WAS_DEFINED
  39. #undef NDEBUG
  40. #define _DEBUG
  41. #undef _DEBUG_WAS_DEFINED
  42. #endif
  43. template <class T> class AsdkDataManager : public AcApDocManagerReactor
  44. {
  45. public:
  46.     AsdkDataManager()
  47.     {
  48.         acDocManager->addReactor(this);
  49.     }
  50.     ~AsdkDataManager()
  51.     {
  52.         acDocManager->removeReactor(this);
  53.     }
  54.     virtual void documentToBeDestroyed( AcApDocument *pDoc )
  55.     {
  56.         m_dataMap.erase(pDoc);
  57.     }
  58.     
  59.     T& docData(AcApDocument* pDoc)
  60.     {
  61.         std::map<AcApDocument*, T>::iterator i;
  62.         i = m_dataMap.find(pDoc);
  63.         if (i==m_dataMap.end())
  64.             return  m_dataMap[ pDoc ];
  65.         else
  66.             return (*i).second;
  67.     }
  68.     T& docData()
  69.     {
  70.         return docData(acDocManager->curDocument());
  71.     }
  72.     
  73. private:
  74.     std::map<AcApDocument*, T> m_dataMap;
  75. };
  76. #endif  /* _ADSKDMGR_H_ */