File indexing completed on 2025-03-16 08:15:00
0001 /* 0002 SPDX-FileCopyrightText: 2023 Vlad Zahorodnii <vlad.zahorodnii@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <sys/mman.h> 0010 #include <utility> 0011 0012 namespace KWin 0013 { 0014 0015 class MemoryMap 0016 { 0017 public: 0018 MemoryMap() 0019 : m_data(MAP_FAILED) 0020 , m_size(0) 0021 { 0022 } 0023 0024 MemoryMap(int size, int prot, int flags, int fd, off_t offset) 0025 : m_data(mmap(nullptr, size, prot, flags, fd, offset)) 0026 , m_size(size) 0027 { 0028 } 0029 0030 MemoryMap(MemoryMap &&other) 0031 : m_data(std::exchange(other.m_data, MAP_FAILED)) 0032 , m_size(std::exchange(other.m_size, 0)) 0033 { 0034 } 0035 0036 ~MemoryMap() 0037 { 0038 if (m_data != MAP_FAILED) { 0039 munmap(m_data, m_size); 0040 } 0041 } 0042 0043 MemoryMap &operator=(MemoryMap &&other) 0044 { 0045 if (m_data != MAP_FAILED) { 0046 munmap(m_data, m_size); 0047 } 0048 m_data = std::exchange(other.m_data, MAP_FAILED); 0049 m_size = std::exchange(other.m_size, 0); 0050 return *this; 0051 } 0052 0053 inline bool isValid() const 0054 { 0055 return m_data != MAP_FAILED; 0056 } 0057 0058 inline void *data() const 0059 { 0060 return m_data; 0061 } 0062 0063 inline int size() const 0064 { 0065 return m_size; 0066 } 0067 0068 private: 0069 void *m_data; 0070 int m_size; 0071 }; 0072 0073 } // namespace KWin