SSTACK.C

[目次 | 関数]

目次

関数一覧


   1|/**************************************************************************
   2|*  1. <<< 固定長スタック (SStack) >>> 
   3|*
   4|*  Static Stack
   5|*
   6|*・配列を用いた単純なスタックです。
   7|*・ポインタまたは値が入ります。
   8|*・要素数の最大は、初期化時に固定されます。
   9|*
  10|* 【属性】
  11|*  ・要素のサイズ(byte) [SStack.size]
  12|*  ・スタックに入っている要素数 [SStack.n](兼)
  13|*  ・スタック・ポインタ [SStack.n](兼)
  14|*  ・スタックに入れることができる最大の要素数 [SStack.max]
  15|***************************************************************************/
  16|
  17|#include  <all.h>
  18|#include  <string.h>
  19|
  20|/**************************************************************************
  21|*  2. <<< 初期化する [SStack_initX()] >>>
  22|***************************************************************************/
  23|void  SStack_initX( SStack* m, void* array, int size, int max )
  24|{
  25|  m->array = (char*)array;
  26|  m->size = size;
  27|  m->n = 0;
  28|  m->max = max;
  29|}
  30|
  31|
  32|#ifndef SDV830
  33|
  34|/**************************************************************************
  35|*  3. <<< スタックに入れる [SStack_pushX()] >>>
  36|***************************************************************************/
  37|void  SStack_pushX( SStack* m, void* item )
  38|{
  39|  memcpy( &m->array[ m->size * m->n ], item, m->size );
  40|  m->n ++;
  41|}
  42|
  43|#endif
  44|
  45|
  46|/**************************************************************************
  47|*  4. <<< スタックから取出す [SStack_popX()] >>>
  48|***************************************************************************/
  49|void*  SStack_popX( SStack* m )
  50|{
  51|  m->n --;
  52|  return  &m->array[ m->size * m->n ];
  53|}
  54|
  55|
  56|/*-- テスト -------------------------------------*/
  57|#if 0
  58|
  59|#include <stdio.h>
  60|
  61|void  main()
  62|{
  63|  static char  mem[sizeof(int)*10];
  64|  SStack  stack;
  65|  int     i;
  66|
  67|  SStack_init( &stack, mem, int, 10 );
  68|  for ( i = 0; i < 10; i++ ) {
  69|    SStack_push( &stack, i, int );
  70|  }
  71|  for ( i = 0; i < 10; i++ ) {
  72|    printf( "%d\n", SStack_pop( &stack, int ));
  73|  }
  74|}
  75|#endif
  76| 
  77|