Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _XN_STACK_H
00027 #define _XN_STACK_H
00028
00029
00030
00031
00032 #include "XnList.h"
00033
00034
00035
00036
00040 class XnStack
00041 {
00042 public:
00046 XnStack() {}
00050 ~XnStack() {}
00051
00059 XnStatus Push(XnValue const& value)
00060 {
00061 return m_List.AddFirst(value);
00062 }
00063
00071 XnStatus Pop(XnValue& value)
00072 {
00073 if (IsEmpty())
00074 {
00075 return XN_STATUS_IS_EMPTY;
00076 }
00077
00078 value = *(m_List.begin());
00079 return m_List.Remove(m_List.begin());
00080 }
00081
00087 XnValue const& Top() const
00088 {
00089 return *(m_List.begin());
00090 }
00091
00097 XnValue& Top()
00098 {
00099 return *(m_List.begin());
00100 }
00101
00105 XnBool IsEmpty() const
00106 {
00107 return m_List.IsEmpty();
00108 }
00109
00113 XnUInt32 Size() const
00114 {
00115 return m_List.Size();
00116 }
00117
00118 private:
00120 XnList m_List;
00121 };
00122
00127 #define XN_DECLARE_STACK_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator) \
00128 \
00129 XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator, XnStack)
00130
00135 #define XN_DECLARE_STACK_WITH_TRANSLATOR(Type, ClassName, Translator) \
00136 XN_DECLARE_STACK_WITH_TRANSLATOR_DECL(, ClassName, Translator)
00137
00142 #define XN_DECLARE_STACK_DECL(decl, Type, ClassName) \
00143 XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
00144 XN_DECLARE_STACK_WITH_TRANSLATOR_DECL(decl, Type, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName))
00145
00149 #define XN_DECLARE_STACK(Type, ClassName) \
00150 XN_DECLARE_STACK_DECL(, Type, ClassName)
00151
00152
00153 #endif // _XN_STACK_H