Stack.cpp@3:d76eb9986be8, 2011-06-26 (annotated)
- Committer:
- okini3939
- Date:
- Sun Jun 26 12:01:49 2011 +0000
- Revision:
- 3:d76eb9986be8
- Parent:
- 2:24471619232e
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:b265e22ddece | 1 | /* |
okini3939 | 0:b265e22ddece | 2 | * mbed library for Stack |
okini3939 | 0:b265e22ddece | 3 | * Copyright (c) 2011 Hiroshi Suga |
okini3939 | 0:b265e22ddece | 4 | * Released under the MIT License: http://mbed.org/license/mit |
okini3939 | 0:b265e22ddece | 5 | */ |
okini3939 | 0:b265e22ddece | 6 | |
okini3939 | 0:b265e22ddece | 7 | /** @file Stack.cpp |
okini3939 | 0:b265e22ddece | 8 | * @brief Stack |
okini3939 | 0:b265e22ddece | 9 | */ |
okini3939 | 0:b265e22ddece | 10 | |
okini3939 | 0:b265e22ddece | 11 | #include "Stack.h" |
okini3939 | 0:b265e22ddece | 12 | |
okini3939 | 3:d76eb9986be8 | 13 | template <class T> |
okini3939 | 3:d76eb9986be8 | 14 | Stack<T>::Stack (int p_size) { |
okini3939 | 0:b265e22ddece | 15 | size = p_size + 1; |
okini3939 | 3:d76eb9986be8 | 16 | buf = new T[size]; |
okini3939 | 3:d76eb9986be8 | 17 | // buf = (T*)malloc(sizeof(T) * size); |
okini3939 | 0:b265e22ddece | 18 | addr = 0; |
okini3939 | 0:b265e22ddece | 19 | } |
okini3939 | 0:b265e22ddece | 20 | |
okini3939 | 3:d76eb9986be8 | 21 | template <class T> |
okini3939 | 3:d76eb9986be8 | 22 | Stack<T>::~Stack () { |
okini3939 | 0:b265e22ddece | 23 | delete [] buf; |
okini3939 | 3:d76eb9986be8 | 24 | // free(buf); |
okini3939 | 0:b265e22ddece | 25 | } |
okini3939 | 0:b265e22ddece | 26 | |
okini3939 | 3:d76eb9986be8 | 27 | template <class T> |
okini3939 | 3:d76eb9986be8 | 28 | int Stack<T>::push (T dat) { |
okini3939 | 0:b265e22ddece | 29 | |
okini3939 | 0:b265e22ddece | 30 | if (addr >= size) { |
okini3939 | 0:b265e22ddece | 31 | return -1; |
okini3939 | 0:b265e22ddece | 32 | } |
okini3939 | 0:b265e22ddece | 33 | buf[addr] = dat; |
okini3939 | 0:b265e22ddece | 34 | addr ++; |
okini3939 | 0:b265e22ddece | 35 | return dat; |
okini3939 | 0:b265e22ddece | 36 | } |
okini3939 | 0:b265e22ddece | 37 | |
okini3939 | 3:d76eb9986be8 | 38 | template <class T> |
okini3939 | 3:d76eb9986be8 | 39 | int Stack<T>::pop (T *dat) { |
okini3939 | 0:b265e22ddece | 40 | |
okini3939 | 0:b265e22ddece | 41 | if (addr == 0) { |
okini3939 | 0:b265e22ddece | 42 | return -1; |
okini3939 | 0:b265e22ddece | 43 | } |
okini3939 | 0:b265e22ddece | 44 | addr --; |
okini3939 | 0:b265e22ddece | 45 | *dat = buf[addr]; |
okini3939 | 0:b265e22ddece | 46 | return 0; |
okini3939 | 0:b265e22ddece | 47 | } |
okini3939 | 0:b265e22ddece | 48 | |
okini3939 | 3:d76eb9986be8 | 49 | template <class T> |
okini3939 | 3:d76eb9986be8 | 50 | int Stack<T>::read (T *dat) { |
okini3939 | 1:6385db13c2d6 | 51 | |
okini3939 | 1:6385db13c2d6 | 52 | if (addr == 0) { |
okini3939 | 1:6385db13c2d6 | 53 | return -1; |
okini3939 | 1:6385db13c2d6 | 54 | } |
okini3939 | 1:6385db13c2d6 | 55 | *dat = buf[addr]; |
okini3939 | 1:6385db13c2d6 | 56 | return 0; |
okini3939 | 1:6385db13c2d6 | 57 | } |
okini3939 | 1:6385db13c2d6 | 58 | |
okini3939 | 3:d76eb9986be8 | 59 | template <class T> |
okini3939 | 3:d76eb9986be8 | 60 | int Stack<T>::available () { |
okini3939 | 0:b265e22ddece | 61 | return size - addr; |
okini3939 | 0:b265e22ddece | 62 | } |
okini3939 | 0:b265e22ddece | 63 | |
okini3939 | 3:d76eb9986be8 | 64 | template <class T> |
okini3939 | 3:d76eb9986be8 | 65 | int Stack<T>::use () { |
okini3939 | 0:b265e22ddece | 66 | return addr; |
okini3939 | 0:b265e22ddece | 67 | } |
okini3939 | 0:b265e22ddece | 68 | |
okini3939 | 3:d76eb9986be8 | 69 | template <class T> |
okini3939 | 3:d76eb9986be8 | 70 | void Stack<T>::clear () { |
okini3939 | 0:b265e22ddece | 71 | addr = 0; |
okini3939 | 0:b265e22ddece | 72 | } |
okini3939 | 3:d76eb9986be8 | 73 | |
okini3939 | 3:d76eb9986be8 | 74 | template class Stack<int>; |
okini3939 | 3:d76eb9986be8 | 75 | template class Stack<float>; |