Artifact Content

Not logged in

Artifact 497c03c8bc7cf457e9c510ecbf8c8bb36aad361e


     1  //--- K.I.LIB ---
     2  // kl_misc.h : common-classes for K.I.LIB
     3  
     4  #ifndef AFX_KILIBBASE_H__89998F34_A9FE_4A27_A159_671F85AA9383__INCLUDED_
     5  #define AFX_KILIBBASE_H__89998F34_A9FE_4A27_A159_671F85AA9383__INCLUDED_
     6  
     7  /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
     8  // 使用する外部関数を何となくマクロ化しておく
     9  // 追記:何でこんなことやったんだ…? > 昔の自分(^^;
    10  
    11  #define ki_strlen(p)      ::lstrlen(p)
    12  #define ki_strcpy(p,s)    ::lstrcpy(p,s)
    13  #define ki_strcat(p,s)    ::lstrcat(p,s)
    14  #define ki_strcmp(p,s)    ::lstrcmp(p,s)
    15  #define ki_strcmpi(p,s)   ::lstrcmpi(p,s)
    16  #define ki_memzero(p,l)   ::ZeroMemory(p,l)
    17  #define ki_memcpy(p,s,l)  ::CopyMemory(p,s,l)
    18  #define ki_memmov(p,s,l)  ::MoveMemory(p,s,l)
    19  #define ki_memset(p,c,l)  ::FillMemory(p,l,c)
    20  inline bool ki_memcmp( const char* x, const char* y, int l )
    21  {
    22  	while( *x++==*y++ && --l );
    23  	return l==0;
    24  }
    25  
    26  /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
    27  // kiArray : 配列のようなキューのような代物
    28  
    29  template <class T> class kiArray
    30  {
    31  public: //-- 外向きインターフェイス --------------------------
    32  
    33  	// 初期サイズ( 10〜255 )で初期化
    34  	kiArray( unsigned char start_size=10 )
    35  		{
    36  			m_pArray = new T[ m_ALen=start_size ];
    37  			m_Len = 0;
    38  		}
    39  
    40  	// 配列を空にする
    41  	void empty()
    42  		{
    43  			m_Len = 0;
    44  		}
    45  
    46  	// 要素数を取得
    47  	unsigned long len() const
    48  		{
    49  			return m_Len;
    50  		}
    51  
    52  	// 末尾に一個追加
    53  	void add( const T& obj )
    54  		{
    55  			if( m_Len>=m_ALen )
    56  			{
    57  				T* p = new T[ m_ALen<<=1 ];
    58  				for( unsigned long i=0; i!=m_Len; i++ )
    59  					p[i] = m_pArray[i];
    60  				delete [] m_pArray;
    61  				m_pArray = p;
    62  			}
    63  			m_pArray[ m_Len++ ] = obj;
    64  		}
    65  
    66  	// 要素にアクセス
    67  	T& operator []( unsigned long i )
    68  		{
    69  			return m_pArray[i];
    70  		}
    71  	const T& operator []( unsigned long i ) const
    72  		{
    73  			return m_pArray[i];
    74  		}
    75  
    76  	// 配列コピー
    77  	kiArray<T>& operator = ( const kiArray<T>& o )
    78  		{
    79  			if( &o != this )
    80  			{
    81  				empty();
    82  				for( unsigned int i=0; i!=o.len(); i++ )
    83  					add( o[i] );
    84  			}
    85  			return *this;
    86  		}
    87  
    88  	//-- ちょっと危険なメソッド群
    89  	void alloc( unsigned long x )
    90  		{
    91  			if( x > m_ALen )
    92  			{
    93  				T* p = new T[ m_ALen=(m_ALen<<1)>x?(m_ALen<<1):x ];
    94  				for( unsigned long i=0; i!=m_Len; i++ )
    95  					p[i] = m_pArray[i];
    96  				delete [] m_pArray;
    97  				m_pArray = p;
    98  			}
    99  		}
   100  	void forcelen( unsigned long x )
   101  		{
   102  			alloc( x );
   103  			m_Len = x;
   104  		}
   105  
   106  private: //-- 内部処理 -----------------------------------
   107  
   108  	T* m_pArray;
   109  	unsigned long m_Len, m_ALen;
   110  
   111  public:
   112  
   113  	virtual ~kiArray()
   114  		{
   115  			delete [] m_pArray;
   116  		}
   117  };
   118  
   119  #define  BoolArray kiArray<bool>
   120  #define  CharArray kiArray<char*>
   121  #define cCharArray kiArray<const char*>
   122  #define   StrArray kiArray<kiStr>
   123  
   124  #endif