ARRAYSI.H
[目次 | 関数 | マクロ]
1|/**************************************************************************
2|* 1. <<< int 型配列 (ArraySI) >>>
3|***************************************************************************/
4|
5|#ifndef __ARRAYSI_H
6|#define __ARRAYSI_H
7|
8|/*----------------------------------------------------------------------
9|[Module Property]
10|name = ArraySI
11|title = int 型配列
12|category = コンテナ
13|src =
14|depend =
15|priority =
16|accord =
17|----------------------------------------------------------------------*/
18|
19|#ifndef USES_PRIORITY_HEADER
20|/*[START_OF_PRIORITY_HEADER]*/
21|
22|#define USES_ARRAYSI
23|
24|/*[END_OF_PRIORITY_HEADER]*/
25|#endif
26|
27|
28|/*-------------------------------------------------------------------*/
29|/* 2. <<< Interface Area ------------------------------------------ >>> */
30|/*-------------------------------------------------------------------*/
31|
32|/**************************************************************************
33|* 3. <<< int 型配列 [ArraySI] >>>
34|*【役割】
35|*・int [] 型の配列と、int 型の要素数で配列を管理している場合に、
36|* これらの関数(マクロ)を使うことが出来ます。
37|*【補足】
38|*・array 引数に int [] 型の配列を、array_n に int 型の要素数のアドレスを
39|* 渡します。
40|*・マクロの内部で memmove 関数を使用しています。string.h を include する
41|* 必要があります。
42|**************************************************************************/
43|void ArraySI_add( int* array, int* array_n, int var );
44|void ArraySI_ins( int* array, int* array_n, int i, int var );
45|void ArraySI_del( int* array, int* array_n, int i );
46|void ArraySI_delLast( int* array_n );
47|
48|
49|/*-------------------------------------------------------------------*/
50|/* 4. <<< Mapping Area -------------------------------------------- >>> */
51|/*-------------------------------------------------------------------*/
52|
53|/**************************************************************************
54|* 5. <<< 要素を追加する [ArraySI_add()] >>>
55|*【引数】
56|* ・int* array; int 型配列の先頭アドレス
57|* ・int array_n; int 型配列の要素数である変数のアドレス
58|* ・int var; 加える要素の値
59|*【補足】
60|*・追加した要素は、配列の最後に追加されます。
61|***************************************************************************/
62|#define ArraySI_add( array, array_n, var ) \
63| ((array)[(*(array_n))++] = (var))
64|
65|
66|/**************************************************************************
67|* 6. <<< 要素を挿入する [ArraySI_ins()] >>>
68|*【引数】
69|* ・int* array; int 型配列の先頭アドレス
70|* ・int* array_n; int 型配列の要素数である変数のアドレス
71|* ・int i; 挿入する位置の添字、0〜要素数
72|* ・int var; 加える要素の値
73|*【補足】
74|*・要素 i を配列の要素 i の位置に挿入します。
75|*・挿入した要素より後ろの要素を後ろにずらします。
76|*・要素数を1つ増やします。
77|***************************************************************************/
78|#define ArraySI_ins( array, array_n, i, var ) \
79| { memmove(&(array)[(i)+1],&(array)[i],((*(array_n))++ - (i)) * sizeof(int) ); \
80| (array)[i] = (var); }
81|
82|
83|/**************************************************************************
84|* 7. <<< 配列の途中から要素を除く [ArraySI_del()] >>>
85|*【引数】
86|* ・int* array; int 型配列の先頭アドレス
87|* ・int* array_n; int 型配列の要素数である変数のアドレス
88|* ・int i; 削除する要素のインデックス
89|*【機能】
90|*・要素 i を配列から除きます。
91|*・除かれる要素より後ろの要素を詰めます。
92|*・要素数を1つ減らします。
93|***************************************************************************/
94|#define ArraySI_del( array, array_n, i ) \
95| memmove( &(array)[i], &(array)[(i)+1], \
96| (--(*(array_n)) - (i)) * sizeof(int) )
97|
98|
99|/**************************************************************************
100|* 8. <<< 配列の末尾から要素を除く [ArraySI_delLast()] >>>
101|*【引数】
102|* ・int* array_n; int 型配列の要素数である変数のアドレス
103|***************************************************************************/
104|#define ArraySI_delLast( array_n ) \
105| ((*(array_n))--)
106|
107|
108|#endif /* __ARRAYSI_H */
109|
110|/*-------------------------------------------------------------*/
111|/* テスト */
112|#if 0
113|void main()
114|{
115| int a[10];
116| int n=0,i;
117|
118| ArraySI_add( a, &n, 1 );
119| if ( n != 1 || a[0] != 1 ) printf( "[ERROR]\n" );
120|
121| ArraySI_add( a, &n, 3 );
122| if ( n != 2 || a[0] != 1 || a[1] != 3 ) printf( "[ERROR]\n" );
123|
124| ArraySI_ins( a, &n, 1, 2 );
125| if ( n != 3 || a[0] != 1 || a[1] != 2 || a[2] != 3 ) printf( "[ERROR]\n" );
126|
127| ArraySI_del( a, &n, 1 );
128| if ( n != 2 || a[0] != 1 || a[1] != 3 ) printf( "[ERROR]\n" );
129|
130| printf( "done.\n" );
131|}
132|#endif
133|
134|