7600b3289d13e627fb196f7582cbd33564daf841
[public/netxms.git] / include / nxqueue.h
1 /*
2 ** NetXMS - Network Management System
3 ** Copyright (C) 2003-2010 Victor Kirhenshtein
4 **
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU Lesser General Public License as published
7 ** by the Free Software Foundation; either version 3 of the License, or
8 ** (at your option) any later version.
9 **
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
14 **
15 ** You should have received a copy of the GNU Lesser General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 **
19 ** File: nxqueue.h
20 **
21 **/
22
23 #ifndef _nxqueue_h_
24 #define _nxqueue_h_
25
26 #include <nms_util.h>
27
28
29 //
30 // Queue class
31 //
32
33 typedef bool (*QUEUE_COMPARATOR)(void *key, void *object);
34
35 class LIBNETXMS_EXPORTABLE Queue
36 {
37 private:
38 MUTEX m_mutexQueueAccess;
39 CONDITION m_condWakeup;
40 void **m_pElements;
41 UINT32 m_dwNumElements;
42 UINT32 m_dwBufferSize;
43 UINT32 m_dwFirst;
44 UINT32 m_dwLast;
45 UINT32 m_dwBufferIncrement;
46 BOOL m_bShutdownFlag;
47
48 void CommonInit();
49 void Lock() { MutexLock(m_mutexQueueAccess); }
50 void Unlock() { MutexUnlock(m_mutexQueueAccess); }
51
52 public:
53 Queue();
54 Queue(UINT32 dwInitialSize, UINT32 dwBufferIncrement = 32);
55 ~Queue();
56
57 void Put(void *pObject);
58 void Insert(void *pObject);
59 void SetShutdownMode();
60 void *Get();
61 void *GetOrBlock();
62 UINT32 Size() { return m_dwNumElements; }
63 void Clear();
64 void *find(void *key, QUEUE_COMPARATOR comparator);
65 bool remove(void *key, QUEUE_COMPARATOR comparator);
66 };
67
68 #endif /* _nxqueue_h_ */