unixsharedmemory.hpp

来自「"More for C++" is a class library that p」· HPP 代码 · 共 87 行

HPP
87
字号
////  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 + =
减小字号Ctrl + -
显示快捷键?