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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: VectorClass.h,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 18:22:39  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*
  10.  * These files were imported into NCBI's CVS directly from FLU version 2.9.1.
  11.  * Modifications to the source are listed below.
  12.  *
  13.  * ==========================================================================
  14.  * $Log: VectorClass.h,v $
  15.  * Revision 1000.0  2004/04/12 18:22:39  gouriano
  16.  * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.1
  17.  *
  18.  * Revision 1.1  2004/03/11 13:51:55  dicuccio
  19.  * Imported FLU version 2.9.1.  Altered export specifiers to match NCBI layout.
  20.  * Altered include paths to match NCBI toolkit layout.
  21.  *
  22.  * ==========================================================================
  23.  */
  24. // $Id: VectorClass.h,v 1000.0 2004/04/12 18:22:39 gouriano Exp $
  25. /***************************************************************
  26.  *                FLU - FLTK Utility Widgets 
  27.  *  Copyright (C) 2002 Ohio Supercomputer Center, Ohio State University
  28.  *
  29.  * This file and its content is protected by a software license.
  30.  * You should have received a copy of this license with this file.
  31.  * If not, please contact the Ohio Supercomputer Center immediately:
  32.  * Attn: Jason Bryan Re: FLU 1224 Kinnear Rd, Columbus, Ohio 43212
  33.  * 
  34.  ***************************************************************/
  35. #ifndef _FLU_VECTOR_CLASS_H
  36. #define _FLU_VECTOR_CLASS_H
  37. #define MakeVectorClass( T, C ) 
  38. class C 
  39. public: 
  40.  
  41.   C() { _array = NULL; _size = 0; } 
  42.  
  43.   ~C() { clear(); } 
  44.  
  45.   inline void add( const T& item ) { insert( size(), item ); } 
  46.  
  47.   inline T& operator [](int i) { return _array[i]; } 
  48.  
  49.   inline T operator [](int i) const { return _array[i]; } 
  50.  
  51.   inline unsigned int size() const { return _size; } 
  52.  
  53.   C& operator =( const C &v ) 
  54.   { 
  55.     clear(); 
  56.     if( v.size() ) 
  57.       { 
  58. _array = new T[v.size()]; 
  59. for( unsigned int i = 0; i < v.size(); i++ ) 
  60.   _array[i] = v._array[i]; 
  61.       } 
  62.     return *this; 
  63.   } 
  64.  
  65.   void insert( unsigned int pos, const T &item ) 
  66.   { 
  67.     if( pos > _size ) 
  68.       pos = _size; 
  69.     if( _size == 0 ) 
  70.       { 
  71. _array = new T[1]; 
  72.       } 
  73.     else 
  74.       { 
  75. if( !( _size & (_size-1) ) ) 
  76.   { 
  77.     T* temp = new T[_size*2]; 
  78.     for( unsigned int i = 0; i < _size; i++ ) 
  79.       temp[i] = _array[i]; 
  80.     delete[] _array; 
  81.     _array = temp; 
  82.   } 
  83. for( unsigned int s = _size; s > pos; s-- ) 
  84.   _array[s] = _array[s-1]; 
  85.       } 
  86.     _size++; 
  87.     _array[pos] = item; 
  88.   } 
  89.  
  90.   void erase( unsigned int pos ) 
  91.   { 
  92.     if( pos >= _size ) 
  93.       return; 
  94.     _size--; 
  95.     if( _size == 0 ) 
  96.       { 
  97. delete[] _array; 
  98. _array = NULL; 
  99.       } 
  100.     else 
  101.       { 
  102. for( ; pos < _size; pos++ ) 
  103.   _array[pos] = _array[pos+1]; 
  104.       } 
  105.   } 
  106.  
  107.   void clear() 
  108.   { 
  109.     if( _array ) 
  110.       delete[] _array; 
  111.     _array = NULL; 
  112.     _size = 0; 
  113.   } 
  114.  
  115. protected: 
  116.   T *_array; 
  117.   unsigned int _size; 
  118. }
  119. #endif