1/*
2 * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26/*
27 * A class to manage queueing of messages for IPC
28 */
29
30#include <windows.h>
31
32#ifndef __AccessBridgeMessageQueue_H__
33#define __AccessBridgeMessageQueue_H__
34
35
36enum QueueReturns {
37    cQueueEmpty = 0,
38    cMoreMessages = 1,
39    cQueueInUse,
40    cElementPushedOK,
41    cQueueFull,
42    cQueueOK,
43    cQueueBroken                // shouldn't ever happen!
44};
45
46class AccessBridgeQueueElement {
47    friend class AccessBridgeMessageQueue;
48    friend class WinAccessBridge;
49    char *buffer;
50    int bufsize;
51    AccessBridgeQueueElement *next;
52    AccessBridgeQueueElement *previous;
53
54public:
55    AccessBridgeQueueElement(char *buf, int size);
56    ~AccessBridgeQueueElement();
57};
58
59class AccessBridgeMessageQueue {
60    BOOL queueLocked;
61    BOOL queueRemoveLocked;
62    AccessBridgeQueueElement *start;
63    AccessBridgeQueueElement *end;
64    int size;
65
66public:
67    AccessBridgeMessageQueue();
68    ~AccessBridgeMessageQueue();
69
70    int getEventsWaiting();
71
72    QueueReturns add(AccessBridgeQueueElement *element);
73    QueueReturns remove(AccessBridgeQueueElement **element);
74    QueueReturns setRemoveLock(BOOL removeLockSetting);
75    BOOL getRemoveLockSetting();
76};
77
78
79#endif
80