AdskDMgr.h
上传用户:detv0711
上传日期:2014-09-18
资源大小:360k
文件大小:2k
源码类别:

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. #endif
  36. #include <map>
  37. #ifdef _DMGR_DEBUG_WAS_DEFINED
  38. #define _DEBUG
  39. #undef _DEBUG_WAS_DEFINED
  40. #endif
  41. template <class T> class AsdkDataManager : public AcApDocManagerReactor
  42. {
  43. public:
  44.     AsdkDataManager()
  45.     {
  46.         acDocManager->addReactor(this);
  47.     }
  48.     ~AsdkDataManager()
  49.     {
  50.         acDocManager->removeReactor(this);
  51.     }
  52.     virtual void documentToBeDestroyed( AcApDocument *pDoc )
  53.     {
  54.         m_dataMap.erase(pDoc);
  55.     }
  56.     
  57.     T& docData(AcApDocument* pDoc)
  58.     {
  59.         std::map<AcApDocument*, T>::iterator i;
  60.         i = m_dataMap.find(pDoc);
  61.         if (i==m_dataMap.end())
  62.             return  m_dataMap[ pDoc ];
  63.         else
  64.             return (*i).second;
  65.     }
  66.     T& docData()
  67.     {
  68.         return docData(acDocManager->curDocument());
  69.     }
  70.     
  71. private:
  72.     std::map<AcApDocument*, T> m_dataMap;
  73. };
  74. #endif  /* _ADSKDMGR_H_ */