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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: enumerated.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:14:37  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.16
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ENUMERATED__HPP
  10. #define ENUMERATED__HPP
  11. /*  $Id: enumerated.hpp,v 1000.1 2004/04/12 17:14:37 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 <serial/typeinfo.hpp>
  42. #include <serial/stdtypes.hpp>
  43. #include <serial/enumvalues.hpp>
  44. /** @addtogroup TypeInfoCPP
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. class NCBI_XSERIAL_EXPORT CEnumeratedTypeInfo : public CPrimitiveTypeInfo
  50. {
  51.     typedef CPrimitiveTypeInfo CParent;
  52. public:
  53.     // values should exist for all live time of our instance
  54.     CEnumeratedTypeInfo(size_t size, const CEnumeratedTypeValues* values,
  55.                         bool sign = false);
  56.     const CEnumeratedTypeValues& Values(void) const
  57.         {
  58.             return m_Values;
  59.         }
  60.     virtual bool IsDefault(TConstObjectPtr object) const;
  61.     virtual bool Equals(TConstObjectPtr , TConstObjectPtr,
  62.                         ESerialRecursionMode how = eRecursive) const;
  63.     virtual void SetDefault(TObjectPtr dst) const;
  64.     virtual void Assign(TObjectPtr dst, TConstObjectPtr src,
  65.                         ESerialRecursionMode how = eRecursive) const;
  66.     virtual bool IsSigned(void) const;
  67.     virtual Int4 GetValueInt4(TConstObjectPtr objectPtr) const;
  68.     virtual Uint4 GetValueUint4(TConstObjectPtr objectPtr) const;
  69.     virtual void SetValueInt4(TObjectPtr objectPtr, Int4 value) const;
  70.     virtual void SetValueUint4(TObjectPtr objectPtr, Uint4 value) const;
  71.     virtual Int8 GetValueInt8(TConstObjectPtr objectPtr) const;
  72.     virtual Uint8 GetValueUint8(TConstObjectPtr objectPtr) const;
  73.     virtual void SetValueInt8(TObjectPtr objectPtr, Int8 value) const;
  74.     virtual void SetValueUint8(TObjectPtr objectPtr, Uint8 value) const;
  75.     virtual void GetValueString(TConstObjectPtr objectPtr,
  76.                                 string& value) const;
  77.     virtual void SetValueString(TObjectPtr objectPtr,
  78.                                 const string& value) const;
  79. protected:
  80.     static TObjectPtr CreateEnum(TTypeInfo objectType);
  81.     static void ReadEnum(CObjectIStream& in,
  82.                          TTypeInfo objectType, TObjectPtr objectPtr);
  83.     static void WriteEnum(CObjectOStream& out,
  84.                           TTypeInfo objectType, TConstObjectPtr objectPtr);
  85.     static void SkipEnum(CObjectIStream& in, TTypeInfo objectType);
  86.     static void CopyEnum(CObjectStreamCopier& copier, TTypeInfo objectType);
  87. private:
  88.     const CPrimitiveTypeInfo* m_ValueType;
  89.     const CEnumeratedTypeValues& m_Values;
  90. };
  91. template<typename T>
  92. inline
  93. CEnumeratedTypeInfo* CreateEnumeratedTypeInfo(const T& ,
  94.                                               const CEnumeratedTypeValues* values)
  95. {
  96.     return new CEnumeratedTypeInfo(sizeof(T), values, T(-1) < 0);
  97. }
  98. END_NCBI_SCOPE
  99. #endif  /* ENUMERATED__HPP */
  100. /* @} */
  101. /* ---------------------------------------------------------------------------
  102. * $Log: enumerated.hpp,v $
  103. * Revision 1000.1  2004/04/12 17:14:37  gouriano
  104. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.16
  105. *
  106. * Revision 1.16  2004/03/25 15:56:27  gouriano
  107. * Added possibility to copy and compare serial object non-recursively
  108. *
  109. * Revision 1.15  2003/04/15 14:15:09  siyan
  110. * Added doxygen support
  111. *
  112. * Revision 1.14  2002/12/23 18:38:50  dicuccio
  113. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  114. * Moved all CVS logs to the end.
  115. *
  116. * Revision 1.13  2001/01/30 21:40:57  vasilche
  117. * Fixed dealing with unsigned enums.
  118. *
  119. * Revision 1.12  2000/12/15 15:37:59  vasilche
  120. * Added support of Int8 and long double.
  121. * Enum values now have type Int4 instead of long.
  122. *
  123. * Revision 1.11  2000/09/18 20:00:01  vasilche
  124. * Separated CVariantInfo and CMemberInfo.
  125. * Implemented copy hooks.
  126. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  127. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  128. *
  129. * Revision 1.10  2000/09/01 13:15:58  vasilche
  130. * Implemented class/container/choice iterators.
  131. * Implemented CObjectStreamCopier for copying data without loading into memory.
  132. *
  133. * Revision 1.9  2000/07/03 18:42:33  vasilche
  134. * Added interface to typeinfo via CObjectInfo and CConstObjectInfo.
  135. * Reduced header dependency.
  136. *
  137. * Revision 1.8  2000/05/24 20:08:11  vasilche
  138. * Implemented XML dump.
  139. *
  140. * Revision 1.7  2000/03/07 14:05:29  vasilche
  141. * Added stream buffering to ASN.1 binary input.
  142. * Optimized class loading/storing.
  143. * Fixed bugs in processing OPTIONAL fields.
  144. *
  145. * Revision 1.6  2000/02/01 21:44:34  vasilche
  146. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  147. * Added buffering to CObjectIStreamAsn.
  148. * Removed CMemberInfo subclasses.
  149. * Added support for DEFAULT/OPTIONAL members.
  150. *
  151. * Revision 1.5  2000/01/10 19:46:31  vasilche
  152. * Fixed encoding/decoding of REAL type.
  153. * Fixed encoding/decoding of StringStore.
  154. * Fixed encoding/decoding of NULL type.
  155. * Fixed error reporting.
  156. * Reduced object map (only classes).
  157. *
  158. * Revision 1.4  1999/12/17 19:04:52  vasilche
  159. * Simplified generation of GetTypeInfo methods.
  160. *
  161. * Revision 1.3  1999/10/28 15:37:37  vasilche
  162. * Fixed null choice pointers handling.
  163. * Cleaned enumertion interface.
  164. *
  165. * Revision 1.2  1999/10/18 20:11:15  vasilche
  166. * Enum values now have long type.
  167. * Fixed template generation for enums.
  168. *
  169. * Revision 1.1  1999/09/24 18:20:05  vasilche
  170. * Removed dependency on NCBI toolkit.
  171. *
  172. *
  173. * ===========================================================================
  174. */