Committer:
okini3939
Date:
Sun Jun 26 12:01:49 2011 +0000
Revision:
3:d76eb9986be8
Parent:
2:24471619232e

        

Who changed what in which revision?

UserRevisionLine numberNew 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>;