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