serialutil.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: serialutil.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2003/12/02 20:33:53  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef SERIALUTIL__HPP
  10. #define SERIALUTIL__HPP
  11. /*  $Id: serialutil.hpp,v 1000.1 2003/12/02 20:33:53 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author: Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   !!! PUT YOUR DESCRIPTION HERE !!!
  40. */
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbiobj.hpp>
  43. #include <serial/serialdef.hpp>
  44. /** @addtogroup UserCodeSupport
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. // helper template for various types:
  50. template<typename T>
  51. class CTypeConverter
  52. {
  53. public:
  54.     typedef T TObjectType; // type of object
  55.     // object getters:
  56.     static TObjectType& Get(TObjectPtr object)
  57.         {
  58.             return *static_cast<TObjectType*>(object);
  59.         }
  60.     static const TObjectType& Get(TConstObjectPtr object)
  61.         {
  62.             return *static_cast<const TObjectType*>(object);
  63.         }
  64.     // set of SafeCast functions which will check validity of casting by
  65.     // dynamic_cast<> in debug mode and will use static_cast<> in release
  66.     // mode for performance.
  67.     static const TObjectType* SafeCast(TTypeInfo type)
  68.         {
  69.             _ASSERT(dynamic_cast<const TObjectType*>(type));
  70.             return static_cast<const TObjectType*>(type);
  71.         }
  72.     static const TObjectType* SafeCast(const CObject* obj)
  73.         {
  74.             _ASSERT(dynamic_cast<const TObjectType*>(obj));
  75.             return static_cast<const TObjectType*>(obj);
  76.         }
  77.     static TObjectType* SafeCast(CObject* obj)
  78.         {
  79.             _ASSERT(dynamic_cast<TObjectType*>(obj));
  80.             return static_cast<TObjectType*>(obj);
  81.         }
  82. private:
  83.     static const TObjectType* SafeCast2(TTypeInfo /*selector*/,
  84.                                         const void* ptr)
  85.         {
  86.             return SafeCast(static_cast<TTypeInfo>(ptr));
  87.         }
  88.     static const TObjectType* SafeCast2(const CObject* /*selector*/,
  89.                                         const void* ptr)
  90.         {
  91.             return SafeCast(static_cast<const CObject*>(ptr));
  92.         }
  93.     static TObjectType* SafeCast2(const CObject* /*selector*/,
  94.                                   void* ptr)
  95.         {
  96.             return SafeCast(static_cast<CObject*>(ptr));
  97.         }
  98.     static const TObjectType* SafeCast2(const void* /*selector*/,
  99.                                         const void* ptr)
  100.         {
  101.             // cannot check types not inherited from CObject or CTypeInfo
  102.             return static_cast<const TObjectType*>(ptr);
  103.         }
  104.     static TObjectType* SafeCast2(const void* /*selector*/,
  105.                                   void* ptr)
  106.         {
  107.             // cannot check types not inherited from CObject or CTypeInfo
  108.             return static_cast<TObjectType*>(ptr);
  109.         }
  110. public:
  111.     static const TObjectType* SafeCast(const void* ptr)
  112.         {
  113.             const T* selector = static_cast<const T*>(0);
  114.             return SafeCast2(selector, ptr);
  115.         }
  116.     static TObjectType* SafeCast(void* ptr)
  117.         {
  118.             const T* selector = static_cast<const T*>(0);
  119.             return SafeCast2(selector, ptr);
  120.         }
  121. };
  122. /* @} */
  123. //#include <serial/serialutil.inl>
  124. END_NCBI_SCOPE
  125. #endif  /* SERIALUTIL__HPP */
  126. /* ---------------------------------------------------------------------------
  127. * $Log: serialutil.hpp,v $
  128. * Revision 1000.1  2003/12/02 20:33:53  gouriano
  129. * PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.5
  130. *
  131. * Revision 1.5  2003/12/01 19:04:22  grichenk
  132. * Moved Add and Sub from serialutil to ncbimisc, made them methods
  133. * of CRawPointer class.
  134. *
  135. * Revision 1.4  2003/04/15 16:18:55  siyan
  136. * Added doxygen support
  137. *
  138. * Revision 1.3  2002/12/23 18:38:51  dicuccio
  139. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  140. * Moved all CVS logs to the end.
  141. *
  142. * Revision 1.2  2000/10/13 20:22:46  vasilche
  143. * Fixed warnings on 64 bit compilers.
  144. * Fixed missing typename in templates.
  145. *
  146. * Revision 1.1  2000/09/18 20:00:10  vasilche
  147. * Separated CVariantInfo and CMemberInfo.
  148. * Implemented copy hooks.
  149. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  150. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  151. *
  152. * ===========================================================================
  153. */