diff options
Diffstat (limited to 'src/libs/qmlpuppetcommunication/container/sharedmemory.h')
-rw-r--r-- | src/libs/qmlpuppetcommunication/container/sharedmemory.h | 67 |
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 |