drivers/can_ixxat_win32/async_access_que.h
changeset 252 b0dd37421d28
child 255 7b9f36dbfe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/drivers/can_ixxat_win32/async_access_que.h	Wed Aug 08 01:43:02 2007 +0200
@@ -0,0 +1,45 @@
+// thread safe que
+// Tochinski Leonid, Chatten Associayes, Inc.
+#pragma once
+#include <deque>
+#include "AutoReleaseCS.h"
+
+template<typename type>
+class async_access_que
+   {
+   public:
+      async_access_que()
+         {
+         ::InitializeCriticalSection(&m_cs);
+         }
+      ~async_access_que()
+         {
+         ::DeleteCriticalSection(&m_cs);
+         }
+
+      void append(const type& data)
+         {
+         AutoReleaseCS acs(m_cs);
+         m_data.push_back(data);
+         }
+
+      bool extract_top(type& data)
+         {
+         AutoReleaseCS acs(m_cs);
+         if (m_data.empty())
+            return false;
+          data = m_data.front();
+          m_data.pop_front();
+         return true;
+         }
+         
+      void clear()
+         {
+         AutoReleaseCS acs(m_cs);
+         m_data.clear();
+         }
+         
+   protected:
+      std::deque<type> m_data;
+      CRITICAL_SECTION m_cs;
+   };