1 /*-------------------------------------------------------------------------- 2 Project: HorizonSDK 3 File: rdt_ReceiveBuffer.h 4 5 Copyright 2009 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Date:: 2010-04-30#$ 14 $Rev: 15289 $ 15 $Author: hiratsu_daisuke $ 16 *-------------------------------------------------------------------------*/ 17 18 #include "stdafx.h" 19 20 #ifndef NN_RDT_RECEIVEBUFFER_H_ 21 #define NN_RDT_RECEIVEBUFFER_H_ 22 23 #include "rdt_RingBuffer.h" 24 25 26 namespace nn { namespace rdt { namespace CTR { 27 28 /*! 29 @brief これは受信バッファを表現するためのクラスです。 30 ネットワーク経由で到着したセグメントは解釈された後、 31 実データがこのバッファに追加されていきます。 32 */ 33 class ReceiveBuffer{ 34 public: 35 /*! 36 @brief 初期化します。 37 */ 38 ReceiveBuffer(void); 39 40 /*! 41 @brief 解放します。 42 */ 43 ~ReceiveBuffer(void); 44 45 /*! 46 @brief 初期化します。初期シーケンス番号はゼロにセットされます。 47 必要であれば、SetInitialSequenceNumber()を後で呼び出して下さい。 48 */ 49 void Initialize(void *pBuf, u16 bufSize); 50 51 /*! 52 @brief 解放処理を行います。 53 */ 54 void Finalize(void); 55 56 /*! 57 @brief numには、初期シーケンス番号をセットします。 58 実際に到着するデータの先頭のシーケンス番号は、ここで設定した値に 59 +1されたものであるとします。 60 この関数は、データをこのウィンドウに詰める前に呼び出しておかねばなりません。 61 */ 62 void SetInitialSequenceNumber(u32 num); 63 64 /*! 65 @brief データ列の先頭からnバイトを除去します。 66 データ列の長さよりも大きな数値が指定された場合は、データの全てが除去されます。 67 */ 68 void Pop(size_t n); 69 70 /*! 71 @brief ウィンドウにデータを追加します。 72 バッファが不足しており、データを追加するのに充分な空きが無い場合には 73 falseが返ります。 74 */ 75 bool Push(const void *pBuf, size_t len); 76 77 /*! 78 @brief ウィンドウからデータを読み出します。 79 この関数呼び出しのみでは、このオブジェクトに保持されている 80 データは除去されません。 81 読み出すことのできたバイト数が返ります。 82 */ 83 size_t Read(void *pBuf, size_t len); 84 85 /*! 86 @brief 到着しているデータのうち、最新データ(最新オクテット)の 87 シーケンス番号を得ます。 88 */ 89 u32 GetLatestSequenceNumber(void) const; 90 91 /*! 92 @brief バッファの空きがどれだけあるかを得ます。単位はバイト(オクテット)です。 93 */ 94 size_t GetRestSize(void) const; 95 96 /*! 97 @brief 保持されているデータを破棄し、まっさらな状態に戻します。 98 Initialize()直後の状態に戻るイメージです。 99 */ 100 void Clear(void); 101 102 /*! 103 @brief バッファがカラッポかどうかを判定します。 104 */ 105 bool IsEmpty(void) const; 106 107 /*! 108 @brief このオブジェクトの状態をプリントします。(デバッグ用) 109 */ 110 void PrintDebugInfo(void) const; 111 112 /*! 113 @brief CUnitによる単体テストです。 114 */ 115 static void Test(void); 116 117 118 private: 119 /*! 120 @brief コピーコンストラクタは封印します。 121 */ 122 ReceiveBuffer (const ReceiveBuffer&); 123 124 /*! 125 @brief 代入演算子は封印します。 126 */ 127 ReceiveBuffer& operator=(const ReceiveBuffer&); 128 129 130 // メンバ変数群 131 RingBuffer m_ringBuf; 132 u32 m_initSeqNum; // 初期シーケンス番号 133 u32 m_latestSeqNum; 134 bool m_initialized; // 初期化済みならtrue 135 136 // パディング 137 u8 m_padding[3]; 138 }; 139 140 }}} // namespace nn::rdt::CTR 141 142 #endif // end of NN_RDT_RECEIVEBUFFER_H_ 143