aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/qmlpuppetcommunication/container/sharedmemory.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/qmlpuppetcommunication/container/sharedmemory.h')
-rw-r--r--src/libs/qmlpuppetcommunication/container/sharedmemory.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/libs/qmlpuppetcommunication/container/sharedmemory.h b/src/libs/qmlpuppetcommunication/container/sharedmemory.h
new file mode 100644
index 0000000000..1c5da3454a
--- /dev/null
+++ b/src/libs/qmlpuppetcommunication/container/sharedmemory.h
@@ -0,0 +1,67 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <QSharedMemory>
+#include <QSystemSemaphore>
+
+namespace QmlDesigner {
+
+class SharedMemory
+{
+ friend class SharedMemoryLocker;
+public:
+ SharedMemory();
+ SharedMemory(const QString &key);
+ ~SharedMemory();
+
+ void setKey(const QString &key);
+ QString key() const;
+
+ bool create(int size, QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite);
+ int size() const;
+
+ bool attach(QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite);
+ bool isAttached() const;
+ bool detach();
+
+ void *data();
+ const void* constData() const;
+ const void *data() const;
+
+ bool lock();
+ bool unlock();
+
+ QSharedMemory::SharedMemoryError error() const;
+ QString errorString() const;
+
+protected:
+#ifdef Q_OS_UNIX
+ bool initKeyInternal();
+ void cleanHandleInternal();
+ bool createInternal(QSharedMemory::AccessMode mode, size_t size);
+ bool attachInternal(QSharedMemory::AccessMode mode);
+ bool detachInternal();
+ int handle();
+
+ void setErrorString(const QString &function);
+#endif
+private:
+#ifndef Q_OS_UNIX
+ QSharedMemory m_sharedMemory;
+#else
+ void *m_memory;
+ size_t m_size;
+ QString m_key;
+ QByteArray m_nativeKey;
+ QSharedMemory::SharedMemoryError m_error;
+ QString m_errorString;
+ QSystemSemaphore m_systemSemaphore;
+ bool m_lockedByMe;
+ int m_fileHandle;
+ bool m_createdByMe;
+#endif
+};
+
+} // namespace QmlDesigner