File Annotation

Not logged in
5128eecc9f 2011-02-23        kinaba: //--- K.I.LIB ---
5128eecc9f 2011-02-23        kinaba: // kl_misc.h : common-classes for K.I.LIB
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #ifndef AFX_KILIBBASE_H__89998F34_A9FE_4A27_A159_671F85AA9383__INCLUDED_
5128eecc9f 2011-02-23        kinaba: #define AFX_KILIBBASE_H__89998F34_A9FE_4A27_A159_671F85AA9383__INCLUDED_
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
5128eecc9f 2011-02-23        kinaba: // 使用する外部関数を何となくマクロ化しておく
5128eecc9f 2011-02-23        kinaba: // 追記:何でこんなことやったんだ…? > 昔の自分(^^;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #define ki_strlen(p)      ::lstrlen(p)
5128eecc9f 2011-02-23        kinaba: #define ki_strcpy(p,s)    ::lstrcpy(p,s)
5128eecc9f 2011-02-23        kinaba: #define ki_strcat(p,s)    ::lstrcat(p,s)
5128eecc9f 2011-02-23        kinaba: #define ki_strcmp(p,s)    ::lstrcmp(p,s)
5128eecc9f 2011-02-23        kinaba: #define ki_strcmpi(p,s)   ::lstrcmpi(p,s)
5128eecc9f 2011-02-23        kinaba: #define ki_memzero(p,l)   ::ZeroMemory(p,l)
5128eecc9f 2011-02-23        kinaba: #define ki_memcpy(p,s,l)  ::CopyMemory(p,s,l)
5128eecc9f 2011-02-23        kinaba: #define ki_memmov(p,s,l)  ::MoveMemory(p,s,l)
5128eecc9f 2011-02-23        kinaba: #define ki_memset(p,c,l)  ::FillMemory(p,l,c)
5128eecc9f 2011-02-23        kinaba: inline bool ki_memcmp( const char* x, const char* y, int l )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	while( *x++==*y++ && --l );
5128eecc9f 2011-02-23        kinaba: 	return l==0;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
5128eecc9f 2011-02-23        kinaba: // kiArray : 配列のようなキューのような代物
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: template <class T> class kiArray
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: public: //-- 外向きインターフェイス --------------------------
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// 初期サイズ( 10〜255 )で初期化
5128eecc9f 2011-02-23        kinaba: 	kiArray( unsigned char start_size=10 )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			m_pArray = new T[ m_ALen=start_size ];
5128eecc9f 2011-02-23        kinaba: 			m_Len = 0;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// 配列を空にする
5128eecc9f 2011-02-23        kinaba: 	void empty()
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			m_Len = 0;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// 要素数を取得
5128eecc9f 2011-02-23        kinaba: 	unsigned long len() const
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			return m_Len;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// 末尾に一個追加
5128eecc9f 2011-02-23        kinaba: 	void add( const T& obj )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			if( m_Len>=m_ALen )
5128eecc9f 2011-02-23        kinaba: 			{
5128eecc9f 2011-02-23        kinaba: 				T* p = new T[ m_ALen<<=1 ];
5128eecc9f 2011-02-23        kinaba: 				for( unsigned long i=0; i!=m_Len; i++ )
5128eecc9f 2011-02-23        kinaba: 					p[i] = m_pArray[i];
5128eecc9f 2011-02-23        kinaba: 				delete [] m_pArray;
5128eecc9f 2011-02-23        kinaba: 				m_pArray = p;
5128eecc9f 2011-02-23        kinaba: 			}
5128eecc9f 2011-02-23        kinaba: 			m_pArray[ m_Len++ ] = obj;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// 要素にアクセス
5128eecc9f 2011-02-23        kinaba: 	T& operator []( unsigned long i )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			return m_pArray[i];
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 	const T& operator []( unsigned long i ) const
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			return m_pArray[i];
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// 配列コピー
5128eecc9f 2011-02-23        kinaba: 	kiArray<T>& operator = ( const kiArray<T>& o )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			if( &o != this )
5128eecc9f 2011-02-23        kinaba: 			{
5128eecc9f 2011-02-23        kinaba: 				empty();
5128eecc9f 2011-02-23        kinaba: 				for( unsigned int i=0; i!=o.len(); i++ )
5128eecc9f 2011-02-23        kinaba: 					add( o[i] );
5128eecc9f 2011-02-23        kinaba: 			}
5128eecc9f 2011-02-23        kinaba: 			return *this;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	//-- ちょっと危険なメソッド群
5128eecc9f 2011-02-23        kinaba: 	void alloc( unsigned long x )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			if( x > m_ALen )
5128eecc9f 2011-02-23        kinaba: 			{
5128eecc9f 2011-02-23        kinaba: 				T* p = new T[ m_ALen=(m_ALen<<1)>x?(m_ALen<<1):x ];
5128eecc9f 2011-02-23        kinaba: 				for( unsigned long i=0; i!=m_Len; i++ )
5128eecc9f 2011-02-23        kinaba: 					p[i] = m_pArray[i];
5128eecc9f 2011-02-23        kinaba: 				delete [] m_pArray;
5128eecc9f 2011-02-23        kinaba: 				m_pArray = p;
5128eecc9f 2011-02-23        kinaba: 			}
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 	void forcelen( unsigned long x )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			alloc( x );
5128eecc9f 2011-02-23        kinaba: 			m_Len = x;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: private: //-- 内部処理 -----------------------------------
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	T* m_pArray;
5128eecc9f 2011-02-23        kinaba: 	unsigned long m_Len, m_ALen;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: public:
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	virtual ~kiArray()
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			delete [] m_pArray;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: };
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #define  BoolArray kiArray<bool>
5128eecc9f 2011-02-23        kinaba: #define  CharArray kiArray<char*>
5128eecc9f 2011-02-23        kinaba: #define cCharArray kiArray<const char*>
5128eecc9f 2011-02-23        kinaba: #define   StrArray kiArray<kiStr>
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #endif