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_QUEUE_H
00027 #define _XN_QUEUE_H
00028
00029
00030
00031
00032 #include "XnList.h"
00033
00034
00035
00036
00040 class XnQueue
00041 {
00042 public:
00046 XnQueue() {}
00050 virtual ~XnQueue() {}
00051
00055 virtual XnStatus Init()
00056 {
00057 return (XN_STATUS_OK);
00058 }
00059
00067 virtual XnStatus Push(XnValue const& value)
00068 {
00069 XnStatus nRetVal = XN_STATUS_OK;
00070
00071 nRetVal = m_List.AddLast(value);
00072 XN_IS_STATUS_OK(nRetVal);
00073
00074 return (XN_STATUS_OK);
00075 }
00083 virtual XnStatus Pop(XnValue& value)
00084 {
00085 if (IsEmpty())
00086 {
00087 return XN_STATUS_IS_EMPTY;
00088 }
00089
00090 value = *(m_List.begin());
00091 return m_List.Remove(m_List.begin());
00092 }
00093
00099 XnValue const& Top() const
00100 {
00101 return *(m_List.begin());
00102 }
00103
00109 XnValue& Top()
00110 {
00111 return *(m_List.begin());
00112 }
00113
00117 XnBool IsEmpty() const
00118 {
00119 return m_List.IsEmpty();
00120 }
00121
00125 virtual XnUInt32 Size() const
00126 {
00127 return m_List.Size();
00128 }
00129
00130 private:
00132 XnList m_List;
00133 };
00134
00140 #define XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator, base) \
00141 class decl ClassName : public base \
00142 { \
00143 public: \
00144 ~ClassName() \
00145 { \
00146 \
00147 Type dummy; \
00148 while (Size() != 0) \
00149 Pop(dummy); \
00150 } \
00151 XnStatus Push(Type const& value) \
00152 { \
00153 XnValue val = Translator::CreateValueCopy(value); \
00154 XnStatus nRetVal = base::Push(val); \
00155 if (nRetVal != XN_STATUS_OK) \
00156 { \
00157 Translator::FreeValue(val); \
00158 return (nRetVal); \
00159 } \
00160 return XN_STATUS_OK; \
00161 } \
00162 XnStatus Pop(Type& value) \
00163 { \
00164 XnValue val; \
00165 XnStatus nRetVal = base::Pop(val); \
00166 if (nRetVal != XN_STATUS_OK) return (nRetVal); \
00167 value = Translator::GetFromValue(val); \
00168 return XN_STATUS_OK; \
00169 } \
00170 inline Type const& Top() const { return Translator::GetFromValue(base::Top()); }\
00171 inline Type& Top() { return Translator::GetFromValue(base::Top()); } \
00172 };
00173
00179 #define XN_DECLARE_QUEUE_WITH_TRANSLATOR(Type, ClassName, Translator, base) \
00180 XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(, Type, ClassName, Translator, base)
00181
00186 #define XN_DECLARE_QUEUE_DECL(decl, Type, ClassName) \
00187 XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
00188 XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName), XnQueue)
00189
00193 #define XN_DECLARE_QUEUE(Type, ClassName) \
00194 XN_DECLARE_QUEUE_DECL(, Type, ClassName)
00195
00196 #endif // _XN_QUEUE_H