📄 unixsharedmemory.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 + -