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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llchainio.h
  3.  * @author Phoenix
  4.  * @date 2005-08-04
  5.  * @brief This class declares the interface for constructing io chains.
  6.  *
  7.  * $LicenseInfo:firstyear=2005&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2005-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #ifndef LL_LLCHAINIO_H
  35. #define LL_LLCHAINIO_H
  36. #include "llpumpio.h"
  37. /** 
  38.  * @class LLDeferredChain
  39.  * @brief This class allows easy addition of a chain which will sleep
  40.  * and then process another chain.
  41.  */
  42. class LLDeferredChain
  43. {
  44. public:
  45. /**
  46.  * @brief Add a chain to a pump in a finite # of seconds
  47.  *
  48.  * @prarm pump The pump to work on.
  49.  * @prarm in_seconds The number of seconds from now when chain should start.
  50.  * @prarm chain The chain to add in in_seconds seconds.
  51.  * @prarm chain_timeout timeout for chain on the pump.
  52.  * @return Returns true if the operation was queued.
  53.  */
  54. static bool addToPump(
  55. LLPumpIO* pump,
  56. F32 in_seconds,
  57. const LLPumpIO::chain_t& chain,
  58. F32 chain_timeout);
  59. };
  60. /** 
  61.  * @class LLChainIOFactory
  62.  * @brief This class is an abstract base class for building io chains.
  63.  *
  64.  * This declares an abstract base class for a chain factory. The
  65.  * factory is used to connect an input pipe to the first pipe in the
  66.  * chain, and an output pipe to the last pipe in the chain. This will
  67.  * allow easy construction for buffer based io like services to for
  68.  * API centered IO while abstracting the input and output to simple
  69.  * data passing.
  70.  * To use this class, you should derive a class which implements the
  71.  * <code>build</code> method.
  72.  */
  73. class LLChainIOFactory
  74. {
  75. public:
  76. // Constructor
  77. LLChainIOFactory();
  78. // Destructor
  79. virtual ~LLChainIOFactory();
  80. /** 
  81.  * @brief Build the chian with in as the first and end as the last
  82.  *
  83.  * The caller of the LLChainIOFactory is responsible for managing
  84.  * the memory of the in pipe. All of the chains generated by the
  85.  * factory will be ref counted as usual, so the caller will also
  86.  * need to break the links in the chain.
  87.  * @param chain The chain which will have new pipes appended
  88.  * @param context A context for use by this factory if you choose
  89.  * @retrun Returns true if the call was successful.
  90.  */
  91. virtual bool build(LLPumpIO::chain_t& chain, LLSD context) const = 0;
  92. protected:
  93. };
  94. /** 
  95.  * @class LLSimpleIOFactory
  96.  * @brief Basic implementation for making a factory that returns a
  97.  * 'chain' of one object
  98.  */
  99. template<class Pipe>
  100. class LLSimpleIOFactory : public LLChainIOFactory
  101. {
  102. public:
  103. virtual bool build(LLPumpIO::chain_t& chain, LLSD context) const
  104. {
  105. chain.push_back(LLIOPipe::ptr_t(new Pipe));
  106. return true;
  107. }
  108. };
  109. /** 
  110.  * @class LLCloneIOFactory
  111.  * @brief Implementation for a facory which copies a particular pipe.
  112.  */
  113. template<class Pipe>
  114. class LLCloneIOFactory : public LLChainIOFactory
  115. {
  116. public:
  117. LLCloneIOFactory(Pipe* original) :
  118. mHandle(original),
  119. mOriginal(original) {}
  120. virtual bool build(LLPumpIO::chain_t& chain, LLSD context) const
  121. {
  122. chain.push_back(LLIOPipe::ptr_t(new Pipe(*mOriginal)));
  123. return true;
  124. }
  125. protected:
  126. LLIOPipe::ptr_t mHandle;
  127. Pipe* mOriginal;
  128. };
  129. #endif // LL_LLCHAINIO_H