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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: memberlist.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:14:49  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.26
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef MEMBERLIST__HPP
  10. #define MEMBERLIST__HPP
  11. /*  $Id: memberlist.hpp,v 1000.1 2004/04/12 17:14:49 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/ncbiutil.hpp>
  43. #include <util/lightstr.hpp>
  44. #include <serial/memberid.hpp>
  45. #include <serial/item.hpp>
  46. #include <vector>
  47. #include <map>
  48. /** @addtogroup FieldsComplex
  49.  *
  50.  * @{
  51.  */
  52. BEGIN_NCBI_SCOPE
  53. class CConstObjectInfo;
  54. class CObjectInfo;
  55. // This class supports sets of members with IDs
  56. class NCBI_XSERIAL_EXPORT CItemsInfo
  57. {
  58. public:
  59.     typedef CMemberId::TTag TTag;
  60.     typedef vector< AutoPtr<CItemInfo> > TItems;
  61.     typedef map<CLightString, TMemberIndex> TItemsByName;
  62.     typedef map<TTag, TMemberIndex> TItemsByTag;
  63.     typedef map<size_t, TMemberIndex> TItemsByOffset;
  64.     CItemsInfo(void);
  65.     virtual ~CItemsInfo(void);
  66.     bool Empty(void) const
  67.         {
  68.             return m_Items.empty();
  69.         }
  70.     size_t Size(void) const
  71.         {
  72.             return m_Items.size();
  73.         }
  74.     static TMemberIndex FirstIndex(void)
  75.         {
  76.             return kFirstMemberIndex;
  77.         }
  78.     TMemberIndex LastIndex(void) const
  79.         {
  80.             return m_Items.size();
  81.         }
  82.     TMemberIndex Find(const CLightString& name) const;
  83.     TMemberIndex FindDeep(const CLightString& name) const;
  84.     TMemberIndex FindEmpty(void) const;
  85.     TMemberIndex Find(const CLightString& name, TMemberIndex pos) const;
  86.     TMemberIndex Find(TTag tag) const;
  87.     TMemberIndex Find(TTag tag, TMemberIndex pos) const;
  88.     const CItemInfo* GetItemInfo(TMemberIndex index) const;
  89.     void AddItem(CItemInfo* item);
  90.     // helping member iterator class (internal use)
  91.     class CIterator
  92.     {
  93.     public:
  94.         CIterator(const CItemsInfo& items);
  95.         CIterator(const CItemsInfo& items, TMemberIndex index);
  96.         void SetIndex(TMemberIndex index);
  97.         CIterator& operator=(TMemberIndex index);
  98.         bool Valid(void) const;
  99.         void Next(void);
  100.         void operator++(void);
  101.         TMemberIndex GetIndex(void) const;
  102.         TMemberIndex operator*(void) const;
  103.     private:
  104.         TMemberIndex m_CurrentIndex;
  105.         TMemberIndex m_LastIndex;
  106.     };
  107.     const CItemInfo* GetItemInfo(const CIterator& i) const;
  108. protected:
  109.     CItemInfo* x_GetItemInfo(TMemberIndex index) const;
  110. private:
  111.     const TItemsByName& GetItemsByName(void) const;
  112.     const TItemsByOffset& GetItemsByOffset(void) const;
  113.     pair<TMemberIndex, const TItemsByTag*> GetItemsByTagInfo(void) const;
  114.     // items
  115.     TItems m_Items;
  116.     // items by name
  117.     mutable auto_ptr<TItemsByName> m_ItemsByName;
  118.     // items by tag
  119.     mutable TMemberIndex m_ZeroTagIndex;
  120.     mutable auto_ptr<TItemsByTag> m_ItemsByTag;
  121.     // items by offset
  122.     mutable auto_ptr<TItemsByOffset> m_ItemsByOffset;
  123. };
  124. /* @} */
  125. #include <serial/memberlist.inl>
  126. END_NCBI_SCOPE
  127. #endif  /* MEMBERLIST__HPP */
  128. /* ---------------------------------------------------------------------------
  129. * $Log: memberlist.hpp,v $
  130. * Revision 1000.1  2004/04/12 17:14:49  gouriano
  131. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.26
  132. *
  133. * Revision 1.26  2004/01/08 17:37:33  gouriano
  134. * Added possibility to search for container members, that could be empty
  135. *
  136. * Revision 1.25  2003/09/16 14:49:15  gouriano
  137. * Enhanced AnyContent objects to support XML namespaces and attribute info items.
  138. *
  139. * Revision 1.24  2003/04/15 14:15:26  siyan
  140. * Added doxygen support
  141. *
  142. * Revision 1.23  2003/03/26 16:13:32  vasilche
  143. * Removed TAB symbols. Some formatting.
  144. *
  145. * Revision 1.22  2002/12/23 18:38:51  dicuccio
  146. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  147. * Moved all CVS logs to the end.
  148. *
  149. * Revision 1.21  2002/11/20 21:20:46  gouriano
  150. * added FindDeep method - to search the whole class type tree
  151. *
  152. * Revision 1.20  2002/09/05 21:20:24  vasilche
  153. * Added mutex for items map
  154. *
  155. * Revision 1.19  2001/01/05 20:10:35  vasilche
  156. * CByteSource, CIStrBuffer, COStrBuffer, CLightString, CChecksum, CWeakMap
  157. * were moved to util.
  158. *
  159. * Revision 1.18  2000/10/03 17:22:33  vasilche
  160. * Reduced header dependency.
  161. * Reduced size of debug libraries on WorkShop by 3 times.
  162. * Fixed tag allocation for parent classes.
  163. * Fixed CObject allocation/deallocation in streams.
  164. * Moved instantiation of several templates in separate source file.
  165. *
  166. * Revision 1.17  2000/09/18 20:00:03  vasilche
  167. * Separated CVariantInfo and CMemberInfo.
  168. * Implemented copy hooks.
  169. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  170. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  171. *
  172. * Revision 1.16  2000/09/01 13:15:59  vasilche
  173. * Implemented class/container/choice iterators.
  174. * Implemented CObjectStreamCopier for copying data without loading into memory.
  175. *
  176. * Revision 1.15  2000/08/15 19:44:39  vasilche
  177. * Added Read/Write hooks:
  178. * CReadObjectHook/CWriteObjectHook for objects of specified type.
  179. * CReadClassMemberHook/CWriteClassMemberHook for specified members.
  180. * CReadChoiceVariantHook/CWriteChoiceVariant for specified choice variants.
  181. * CReadContainerElementHook/CWriteContainerElementsHook for containers.
  182. *
  183. * Revision 1.14  2000/07/03 18:42:34  vasilche
  184. * Added interface to typeinfo via CObjectInfo and CConstObjectInfo.
  185. * Reduced header dependency.
  186. *
  187. * Revision 1.13  2000/06/16 16:31:05  vasilche
  188. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  189. *
  190. * Revision 1.12  2000/06/01 19:06:56  vasilche
  191. * Added parsing of XML data.
  192. *
  193. * Revision 1.11  2000/05/24 20:08:12  vasilche
  194. * Implemented XML dump.
  195. *
  196. * Revision 1.10  2000/04/10 21:01:39  vasilche
  197. * Fixed Erase for map/set.
  198. * Added iteratorbase.hpp header for basic internal classes.
  199. *
  200. * Revision 1.9  2000/04/10 18:01:51  vasilche
  201. * Added Erase() for STL types in type iterators.
  202. *
  203. * Revision 1.8  2000/03/29 15:55:20  vasilche
  204. * Added two versions of object info - CObjectInfo and CConstObjectInfo.
  205. * Added generic iterators by class -
  206. *  CTypeIterator<class>, CTypeConstIterator<class>,
  207. *  CStdTypeIterator<type>, CStdTypeConstIterator<type>,
  208. *  CObjectsIterator and CObjectsConstIterator.
  209. *
  210. * Revision 1.7  2000/02/01 21:44:35  vasilche
  211. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  212. * Added buffering to CObjectIStreamAsn.
  213. * Removed CMemberInfo subclasses.
  214. * Added support for DEFAULT/OPTIONAL members.
  215. *
  216. * Revision 1.6  2000/01/10 19:46:31  vasilche
  217. * Fixed encoding/decoding of REAL type.
  218. * Fixed encoding/decoding of StringStore.
  219. * Fixed encoding/decoding of NULL type.
  220. * Fixed error reporting.
  221. * Reduced object map (only classes).
  222. *
  223. * Revision 1.5  1999/09/22 20:11:48  vasilche
  224. * Modified for compilation on IRIX native c++ compiler.
  225. *
  226. * Revision 1.4  1999/09/14 18:54:03  vasilche
  227. * Fixed bugs detected by gcc & egcs.
  228. * Removed unneeded includes.
  229. *
  230. * Revision 1.3  1999/07/20 18:22:54  vasilche
  231. * Added interface to old ASN.1 routines.
  232. * Added fixed choice of subclasses to use for pointers.
  233. *
  234. * Revision 1.2  1999/07/01 17:55:18  vasilche
  235. * Implemented ASN.1 binary write.
  236. *
  237. * Revision 1.1  1999/06/30 16:04:26  vasilche
  238. * Added support for old ASN.1 structures.
  239. *
  240. * ===========================================================================
  241. */