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 #ifndef _XN_QUEUE_H
00023 #define _XN_QUEUE_H
00024
00025
00026
00027
00028 #include "XnList.h"
00029
00030
00031
00032
00036 class XnQueue
00037 {
00038 public:
00042 XnQueue() {}
00046 virtual ~XnQueue() {}
00047
00051 virtual XnStatus Init()
00052 {
00053 return (XN_STATUS_OK);
00054 }
00055
00063 virtual XnStatus Push(XnValue const& value)
00064 {
00065 XnStatus nRetVal = XN_STATUS_OK;
00066
00067 nRetVal = m_List.AddLast(value);
00068 XN_IS_STATUS_OK(nRetVal);
00069
00070 return (XN_STATUS_OK);
00071 }
00079 virtual XnStatus Pop(XnValue& value)
00080 {
00081 if (IsEmpty())
00082 {
00083 return XN_STATUS_IS_EMPTY;
00084 }
00085
00086 value = *(m_List.begin());
00087 return m_List.Remove(m_List.begin());
00088 }
00089
00095 XnValue const& Top() const
00096 {
00097 return *(m_List.begin());
00098 }
00099
00105 XnValue& Top()
00106 {
00107 return *(m_List.begin());
00108 }
00109
00113 XnBool IsEmpty() const
00114 {
00115 return m_List.IsEmpty();
00116 }
00117
00121 virtual XnUInt32 Size() const
00122 {
00123 return m_List.Size();
00124 }
00125
00126 private:
00128 XnList m_List;
00129 };
00130
00136 #define XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator, base) \
00137 class decl ClassName : public base \
00138 { \
00139 public: \
00140 ~ClassName() \
00141 { \
00142 \
00143 Type dummy; \
00144 while (Size() != 0) \
00145 Pop(dummy); \
00146 } \
00147 XnStatus Push(Type const& value) \
00148 { \
00149 XnValue val = Translator::CreateValueCopy(value); \
00150 XnStatus nRetVal = base::Push(val); \
00151 if (nRetVal != XN_STATUS_OK) \
00152 { \
00153 Translator::FreeValue(val); \
00154 return (nRetVal); \
00155 } \
00156 return XN_STATUS_OK; \
00157 } \
00158 XnStatus Pop(Type& value) \
00159 { \
00160 XnValue val; \
00161 XnStatus nRetVal = base::Pop(val); \
00162 if (nRetVal != XN_STATUS_OK) return (nRetVal); \
00163 value = Translator::GetFromValue(val); \
00164 return XN_STATUS_OK; \
00165 } \
00166 inline Type const& Top() const { return Translator::GetFromValue(base::Top()); }\
00167 inline Type& Top() { return Translator::GetFromValue(base::Top()); } \
00168 };
00169
00175 #define XN_DECLARE_QUEUE_WITH_TRANSLATOR(Type, ClassName, Translator, base) \
00176 XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(, Type, ClassName, Translator, base)
00177
00182 #define XN_DECLARE_QUEUE_DECL(decl, Type, ClassName) \
00183 XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
00184 XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName), XnQueue)
00185
00189 #define XN_DECLARE_QUEUE(Type, ClassName) \
00190 XN_DECLARE_QUEUE_DECL(, Type, ClassName)
00191
00192 #endif // _XN_QUEUE_H