
#ifndef DKUTIL_NETWORK_TCP_HPP
#define DKUTIL_NETWORK_TCP_HPP


#include <tcpstream/tcpstream.h>
#include <gimite/socket.h>
#include <dkutil/detail/stream_interface.hpp>
namespace dkutil{

#if 0
class TCPBuffer : public IStream , public tcpbuf{
public:


	virtual ~TCPBuffer(){}
	///読み込む
	virtual bool read(void *buff,size_t size,size_t *readsize){
		

	}
	bool responsible_read(void *buff,size_t size,size_t *readsize){
		return read(buff,size,readsize);
	}
	/*!
	@param buff[in] 書き込むデータへのポインタ
	@param size[in] buffのサイズ
	@return falseならエラー。（stream内部のバッファが足りない等)
	*/
	///書き込む
	virtual bool write(const void *buff,size_t size) = 0;
	bool responsible_write(const void *buff,size_t size){
		return write(buff,size);
	}
	/*!
	@param buff[out] バッファー
	@param size[in] バッファのサイズ
	@param readsize[in] 実際に読み込んだサイズ
	@return falseならエラー。
	@note
	read()との違い：
	ref()は内部のオフセットカウントを変更しない。
	*/
	///中身を見る。
	virtual bool ref(void *buff,size_t size,size_t *readsize) = 0;
	/*!
	@param offset[in] origin指定から何バイト、シークするか。
	@param origin[in] 
	@note
	動作はfseekと同じです。（爆）
	originも実はfseekと同じ指定子をぶち込んでも動いちゃったりします＾＾；
	*/
	///シークする。
	virtual bool setOffset(int offset,int origin) = 0;
	///今のバッファの最初からのオフセットを返す。
	virtual bool getOffset()const = 0;
	/*!
	@note
	serialize_interfaceのポインタをぶち込めば、
	シリアライズしたり、デシリアライズしたりしてくれます。
	*/
	///シリアライズする。
	//virtual bool serialize(serialize_interface *) = 0;
	///内部バッファへのポインタを頂く（無効領域を含む。危険。
	///type()での戻り値がmemory_stream_typeの時のみに御使用ください。
	virtual const void *data()const = 0;
	///内部バッファのサイズ。
	virtual size_type size()const = 0;
	///内部バッファをリサイズする。
	virtual void resize(size_type size) = 0;
	///内部バッファをクリアする。
	virtual void clear() = 0;
	///ストリームのタイプを取得
	virtual int type()const = 0;
	///@return ストリームが初期化されていたらTRUEを返す
	virtual bool isInited()const = 0;


};
#endif

}//end of dkutil namespace



#endif