⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unixsharedmemory.hpp

📁 "More for C++" is a class library that provides some features that are usually common for object ori
💻 HPP
字号:
////  This file is part of the "More for C++" library////  Copyright (c) 1999-2003 by Thorsten Goertz (thorsten@morefor.org)////  The "More for C++" library is free software; you can redistribute it and/or//  modify it under the terms of the license that comes with this package.////  Read "license.txt" for more details.////  THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED//  WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES//  OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.////////////////////////////////////////////////////////////////////////////////#ifndef UNIXSHAREDMEMORY_HPP#define UNIXSHAREDMEMORY_HPP////////////////////////////////////////////////////////////////////////////////#include <more/core/finalizable.hpp>#include <more/os/sharedmemory.hpp>#include <sys/shm.h>////////////////////////////////////////////////////////////////////////////////namespace more{  namespace os  {    namespace unix_    {      class UnixSharedMemory: public SharedMemory, public more::core::Finalizable      {        public:        class Object: public SharedMemory::Object        {          public:            struct SegmentHeader            {              size_t  m_nMagic;              size_t  m_nSize;              int     m_nNextSegment;            };            struct ChunkHeader            {              bool    m_bInUse;              size_t  m_nChunkSize;              size_t  m_nObjectSize;            };            Object( size_t nRootKey, size_t nSize );            Object( const String& sObjectId );            virtual void finalize( );            virtual bool isValid( ) const;            virtual String getId( ) const;            virtual size_t getSize( ) const;            virtual void* getData( ) const;            virtual void destroy( );          private:            ChunkHeader* createChunk( size_t nRootKey, size_t nObjectSize, int& rnSegmentId, size_t& rnChunkOffset );            ChunkHeader* allocateChunk( SegmentHeader* pSegmentHeader, size_t nObjectSize, size_t& rnChunkOffset );            ChunkHeader* retrieveChunk( int nSegmentId, size_t rnChunkOffset );            ChunkHeader* splitChunk( ChunkHeader* pChunkHeader, size_t nObjectSize );            void joinChunks( SegmentHeader* pSegmentHeader );            SegmentHeader* createSegment( size_t nSegmentKey, SegmentHeader* pPreviousSegmentHeader, size_t nSize, int& rnSegmentId );            SegmentHeader* allocateSegment( size_t nSegmentKey, size_t nSize, int& rnSegmentId );            SegmentHeader* retrieveSegment( size_t nSegmentKey, int& rnSegmentId );            SegmentHeader* retrieveSegment( int nSegmentId );            int           m_nSegmentId;            size_t        m_nChunkOffset;            ChunkHeader*  m_pChunkHeader;        };      };    }  }}////////////////////////////////////////////////////////////////////////////////#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -