llpluginsharedmemory.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llpluginsharedmemory.h
  3.  *
  4.  * @cond
  5.  * $LicenseInfo:firstyear=2008&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2008-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  * @endcond
  32.  */
  33. #ifndef LL_LLPLUGINSHAREDMEMORY_H
  34. #define LL_LLPLUGINSHAREDMEMORY_H
  35. class LLPluginSharedMemoryPlatformImpl;
  36. /**
  37.  * @brief LLPluginSharedMemory manages a shared memory segment for use by the LLPlugin API.
  38.  *
  39.  */
  40. class LLPluginSharedMemory
  41. {
  42. LOG_CLASS(LLPluginSharedMemory);
  43. public:
  44. LLPluginSharedMemory();
  45. ~LLPluginSharedMemory();
  46. // Parent will use create/destroy, child will use attach/detach.
  47. // Message transactions will ensure child attaches after parent creates and detaches before parent destroys.
  48.    /** 
  49.     * Creates a shared memory segment, with a name which is guaranteed to be unique on the host at the current time. Used by parent.
  50.     * Message transactions will (? TODO:DOC - should? must?) ensure child attaches after parent creates and detaches before parent destroys.
  51.     *
  52.     * @param[in] size Shared memory size in TODO:DOC units = bytes?.
  53.     *
  54.     * @return False for failure, true for success.
  55.     */
  56. bool create(size_t size);
  57.    /** 
  58.     * Destroys a shared memory segment. Used by parent.
  59.     * Message transactions will (? TODO:DOC - should? must?) ensure child attaches after parent creates and detaches before parent destroys.
  60.     *
  61.     * @return True. TODO:DOC - always returns true. Is this the intended behavior?
  62.     */
  63. bool destroy(void);
  64.    /** 
  65.     * Creates and attaches a name to a shared memory segment. TODO:DOC what's the difference between attach() and create()?
  66.     *
  67.     * @param[in] name Name to attach to memory segment
  68.     * @param[in] size Size of memory segment TODO:DOC in bytes?
  69.     *
  70.     * @return False on failure, true otherwise.
  71.     */
  72. bool attach(const std::string &name, size_t size);
  73.    /** 
  74.     * Detaches shared memory segment.
  75.     *
  76.     * @return False on failure, true otherwise.
  77.     */
  78. bool detach(void);
  79.    /** 
  80.     * Checks if shared memory is mapped to a non-null address.
  81.     *
  82.     * @return True if memory address is non-null, false otherwise.
  83.     */
  84. bool isMapped(void) const { return (mMappedAddress != NULL); };
  85.    /** 
  86.     * Get pointer to shared memory.
  87.     *
  88.     * @return Pointer to shared memory.
  89.     */
  90. void *getMappedAddress(void) const { return mMappedAddress; };
  91.    /** 
  92.     * Get size of shared memory.
  93.     *
  94.     * @return Size of shared memory in bytes. TODO:DOC are bytes the correct unit?
  95.     */
  96. size_t getSize(void) const { return mSize; };
  97.    /** 
  98.     * Get name of shared memory.
  99.     *
  100.     * @return Name of shared memory.
  101.     */
  102. std::string getName() const { return mName; };
  103. private:
  104. bool map(void);
  105. bool unmap(void);
  106. bool close(void);
  107. bool unlink(void);
  108. std::string mName;
  109. size_t mSize;
  110. void *mMappedAddress;
  111. bool mNeedsDestroy;
  112. LLPluginSharedMemoryPlatformImpl *mImpl;
  113. static int sSegmentNumber;
  114. static std::string createName();
  115. };
  116. #endif // LL_LLPLUGINSHAREDMEMORY_H