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|