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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: igraph_data.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:48:12  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_GRAPH___IGRAPH_DATA__HPP
  10. #define GUI_GRAPH___IGRAPH_DATA__HPP
  11. /*  $Id: igraph_data.hpp,v 1000.2 2004/06/01 19:48:12 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.  * Authors:  Andrey Yazhuk
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <corelib/ncbistl.hpp>
  42. #include <gui/graph/igraph.hpp>
  43. /** @addtogroup GUI_GRAPH
  44.  *
  45.  * @{
  46.  */
  47. BEGIN_NCBI_SCOPE
  48. ///////////////////////////////////////////////////////////////////////////////
  49. /// interface IDataArray
  50. class NCBI_GUIGRAPH_EXPORT IDataArray
  51. {
  52. public:
  53.     enum EDataType {
  54.         eNumeric,
  55.         eString,
  56.         eColor,
  57.         ePointer
  58.     };
  59.     virtual ~IDataArray();
  60.     virtual EDataType   GetType() = 0;
  61.     virtual int     GetSize() = 0;
  62. };
  63. ///////////////////////////////////////////////////////////////////////////////
  64. /// class STypeSelector
  65. // this class is used to define TValueType based on EDataType
  66. template <IDataArray::EDataType Type>
  67. struct STypeSelector   {
  68. };
  69. template<> struct STypeSelector<IDataArray::eNumeric>   {
  70.     typedef TModelUnit  TValueType;
  71. };
  72. template<> struct STypeSelector<IDataArray::eString>    {
  73.     typedef string  TValueType;
  74. };
  75. template<> struct STypeSelector<IDataArray::eColor>    {
  76.     typedef CGlColor  TValueType;
  77. };
  78. template<> struct STypeSelector<IDataArray::ePointer>    {
  79.     typedef void*  TValueType;
  80. };
  81. ///////////////////////////////////////////////////////////////////////////////
  82. /// class ITypedDataArray<Type>
  83. template <IDataArray::EDataType Type>
  84. class ITypedDataArray : public IDataArray
  85. {
  86. public:
  87.     typedef typename STypeSelector<Type>::TValueType TValueType;
  88.     virtual EDataType   GetType()   {   return Type;    }
  89.     virtual int     GetSize() = 0;
  90.     virtual TValueType    GetElem(int i) = 0; // returns value of specialized type
  91. };
  92. // specialization for various EDataTypes
  93. typedef ITypedDataArray<IDataArray::eNumeric>   INumericArray;
  94. typedef ITypedDataArray<IDataArray::eString>    IStringArray;
  95. typedef ITypedDataArray<IDataArray::eColor>     IColorArray;
  96. typedef ITypedDataArray<IDataArray::ePointer>   IPointerArray;
  97. ///////////////////////////////////////////////////////////////////////////////
  98. /// class CTypedArrayAdapter<Type, TBase>
  99. template <IDataArray::EDataType Type,
  100.     typename TBase =
  101. #ifndef NCBI_COMPILER_MSVC
  102.     typename
  103. #endif
  104.     ITypedDataArray<Type>::TValueType >
  105.     class CTypedArrayAdapter : public ITypedDataArray<Type>
  106. {
  107. public:
  108.     typedef typename ITypedDataArray<Type>::TValueType TValueType;
  109.     typedef vector<TBase> TCont;
  110.     CTypedArrayAdapter()    {}
  111.     CTypedArrayAdapter(int Length) {    m_vValues.resize(Length);   }
  112.     // ITypedDataArray<Type> implementation
  113.     virtual int     GetSize()    {   return m_vValues.size();   }
  114.     virtual TValueType  GetElem(int i) 
  115.     {
  116.         _ASSERT(i >= 0 && (size_t)i < m_vValues.size());
  117.         return (TValueType) m_vValues[i];
  118.     };
  119.     TCont&    GetContainer()    {   return m_vValues;  }
  120.     const TCont&    GetContainer()  const    {   return m_vValues;  }
  121.     
  122. protected:
  123.     TCont m_vValues;
  124. };
  125. ///////////////////////////////////////////////////////////////////////////////
  126. /// class CSeriesBase
  127. /// CSeries represents a set of colinear IDataArrays and provides basic access and management.
  128. /// All arrays must have the same length.
  129. class NCBI_GUIGRAPH_EXPORT CSeriesBase
  130. {
  131. public:
  132.     typedef IDataArray::EDataType   EDataType;
  133.     virtual ~CSeriesBase();
  134.     // user interface for accessing data
  135.     int GetLength() const;
  136.     int GetArraysCount() const;
  137.     
  138.     EDataType   GetArrayType(int iArray) const;
  139.     IDataArray* GetArray(int iArray) const;
  140.     
  141.     //string      GetArrayName(int iArray) const;    
  142.     //int     GetIndexByName(const string& Name);
  143. protected:
  144.     // DataArray management interface provided for derived classes
  145.     CSeriesBase();
  146.     CSeriesBase(int Length);
  147.     
  148.     virtual void    CreateArrays();    
  149.     virtual void    CreateArrays(int Length);    
  150.     // CSeriesBase owns IDataArray-s added to series, destructor will destroy them
  151.     void    AddArray(/*const string& Name,*/ IDataArray* pArray);
  152.     void    InsertArray(int iArray,/*const string& Name,*/ IDataArray* pArray);
  153.     //void    RemoveArray(int iArray);
  154.     void    RemoveAllArrays();
  155.         
  156.     // type-safe functions returning specialized arrays
  157.     INumericArray*  x_GetNumericArray(int iArray);
  158.     IStringArray*   x_GetStringArray(int iArray);
  159.     IColorArray*    x_GetColorArray(int iArray);
  160.     IPointerArray*  x_GetPointerArray(int iArray);
  161.     inline void AssertArrayIndex(int iArray) const
  162.     {
  163.         _ASSERT(iArray >=0 && (size_t)iArray < m_vpArrays.size());
  164.     }
  165. protected:
  166.     vector<IDataArray*>    m_vpArrays;
  167.     map<string, int>    m_mpNameToIndex;
  168.     int m_Length;
  169. };
  170. END_NCBI_SCOPE
  171. /*
  172.  * ===========================================================================
  173.  * $Log: igraph_data.hpp,v $
  174.  * Revision 1000.2  2004/06/01 19:48:12  gouriano
  175.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  176.  *
  177.  * Revision 1.10  2004/05/11 18:54:43  dicuccio
  178.  * Added doxygen modules info
  179.  *
  180.  * Revision 1.9  2004/03/24 20:33:42  gorelenk
  181.  * Added missed export prefixes.
  182.  *
  183.  * Revision 1.8  2003/10/08 14:11:30  dicuccio
  184.  * Code clean-up.  Use <> instead of "" for #includes.  Moved CGlPane into opengl.
  185.  * Moved CGlPoint and CGlRect into opengl.
  186.  *
  187.  * Revision 1.7  2003/09/10 21:51:24  yazhuk
  188.  * GCC compilation fixes
  189.  *
  190.  * Revision 1.6  2003/09/04 13:58:42  dicuccio
  191.  * Added export specifiers.  Inlined destructors of interface classes
  192.  *
  193.  * Revision 1.5  2003/08/12 21:12:01  ucko
  194.  * Give up on reaching a compromise and simply conditionalize the use of
  195.  * "typename" at one point on the compiler in use; MIPSpro, in
  196.  * particular, still needed it.
  197.  *
  198.  * Revision 1.4  2003/08/11 19:17:09  yazhuk
  199.  * Compilation fix for MSVC
  200.  *
  201.  * Revision 1.3  2003/08/11 16:08:26  yazhuk
  202.  * Compilation fixes for GCC.
  203.  *
  204.  * Revision 1.2  2003/08/10 14:11:18  dicuccio
  205.  * Compilation fixes for gcc
  206.  *
  207.  * Revision 1.1  2003/08/08 16:01:35  yazhuk
  208.  * Initial revision.
  209.  *
  210.  * ===========================================================================
  211.  */
  212. #endif