Dependencies:   mbed

stack.h

Committer:
Midimetric
Date:
2011-06-07
Revision:
0:71d791204057

File content as of revision 0:71d791204057:

#ifndef STACK_H
#define STACK_H

template<class T>
class Stack
{
public:
    T Data[50];
    short Position;

    Stack() : Position(0) {}

    inline void Push( T v ) { if( Position < 50 ) Data[Position++] = v; }
    inline T Pull() { if( Position ) return Data[--Position]; else return (T)NAKN; }
    
    void Pull( T &a ) 
    { 
        if( Position )     a = Data[--Position]; 
        else             a = (T)NAKN; 
    }
    void Pull( T &b, T &a ) 
    { 
        if( Position )  b = Data[--Position]; 
        else            b = (T)NAKN; 
        if( Position )  a = Data[--Position]; 
        else            a = (T)NAKN; 
    }
    void Pull( T &c, T &b, T &a ) 
    { 
        if( Position )  c = Data[--Position]; 
        else            c = (T)NAKN; 
        if( Position )  b = Data[--Position]; 
        else            b = (T)NAKN; 
        if( Position )  a = Data[--Position]; 
        else            a = (T)NAKN; 
    }
    void Pull( T &d, T &c, T &b, T &a ) 
    { 
        if( Position )  d = Data[--Position]; 
        else            d = (T)NAKN; 
        if( Position )  c = Data[--Position]; 
        else            c = (T)NAKN; 
        if( Position )  b = Data[--Position]; 
        else            b = (T)NAKN; 
        if( Position )  a = Data[--Position]; 
        else            a = (T)NAKN; 
    }
};
#endif