/*-------------------------------------------------------------------------- Project: HorizonSDK File: rdt_SendBuffer.h Copyright 2009 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Date:: 2010-04-30#$ $Rev: 15289 $ $Author: hiratsu_daisuke $ *-------------------------------------------------------------------------*/ #include "stdafx.h" #ifndef NN_RDT_SENDBUFFER_H_ #define NN_RDT_SENDBUFFER_H_ #include "rdt_RingBuffer.h" namespace nn { namespace rdt { namespace CTR { /*! @brief これは送信バッファを表現するクラスです。 */ class SendBuffer{ public: /*! @brief 初期化します。 */ SendBuffer(void); /*! @brief 解放します。 */ ~SendBuffer(void); /*! @brief 初期化します。初期シーケンス番号は明示的に与えます。 */ void Initialize(void *pBuf, u16 bufSize); /*! @brief 解放処理を行います。 */ void Finalize(void); /*! @brief データを追加します。 バッファの空きが不足しており、データを追加するのに充分な空きが無い場合には falseが返ります。 */ bool Push(const void *pBuf, size_t len); /*! @brief バッファからデータを取り出します。また、取り出したデータの 先頭オクテットのシーケンス番号も得られます。 取り出したデータは、このオブジェクトから除去されることに注意して下さい。 取り出すことのできたバイト数が返ります。 */ size_t Pull(void *pBuf, u32 *pSeq, size_t len); /*! @brief バッファがカラッポかどうかを判定します。 */ bool IsEmpty(void) const; /*! @brief 初期シーケンス番号を取得します。 */ u32 GetInitialSequenceNumber(void) const; /*! @brief 現時点でのシーケンス番号を取得します。 */ u32 GetCurrentSequenceNumber(void) const; /*! @brief 保持されているデータを破棄し、まっさらな状態に戻します。 Initialize()直後の状態に戻るイメージです。 初期シーケンス番号も再設定する必要があります。 */ void Clear(u32 initSeqNum); /*! @brief このオブジェクトの状態をプリントします。(デバッグ用) */ void PrintDebugInfo(void) const; /*! @brief CUnitによる単体テストです。 */ static void Test(void); private: /*! @brief コピーコンストラクタは封印します。 */ SendBuffer (const SendBuffer&); /*! @brief 代入演算子は封印します。 */ SendBuffer& operator=(const SendBuffer&); u32 genInitSeqNum(void) const; RingBuffer m_ringBuf; u32 m_initSeqNum; // 初期シーケンス番号 u32 m_readByte; // これまでにPullによって読み取られたデータのバイト数 bool m_initialized; u8 m_padding[3]; // パディング }; }}} // namespace nn::rdt::CTR #endif // end of NN_RDT_SENDBUFFER_H_