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