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|