⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stream.h

📁 这是和p2p相关的一份源码
💻 H
字号:
// ------------------------------------------------// File : stream.h// Date: 4-apr-2002// Author: giles// Desc: //// (c) 2002 peercast.org// ------------------------------------------------// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// ------------------------------------------------#ifndef _STREAM_H#define _STREAM_H// -------------------------------------#include <stdio.h>#include <stdarg.h>#include <string.h>#include "common.h"#include "sys.h"// -------------------------------------class Stream{public:	Stream()	{		writeCRLF = true;		totalBytesIn = totalBytesOut = 0;		lastBytesIn = lastBytesOut = 0;		bytesInPerSec = bytesOutPerSec = 0;		lastUpdate = 0;	}	virtual int read(void *,int)=0;	virtual void write(const void *,int) = 0;    virtual bool eof()    {    	throw StreamException("Stream can`t eof");		return false;    }	virtual void rewind()	{    	throw StreamException("Stream can`t rewind");	}	virtual void skip(int i)	{		while ((!eof()) && (i--))		{			char c;			read(&c,1);		}	}	virtual void close()	{	}	// binary    char	readChar()    {    	char v;        read(&v,1);        return v;    }    short	readShort()    {    	short v;        read(&v,2);        v = sys->convertEndian((unsigned short)v);        return v;    }    long	readLong()    {    	long v;        read(&v,4);        v = sys->convertEndian((unsigned int)v);        return v;    }	long readTag()	{		long v = readLong();		return SWAP4(v);	}	int	readString(char *s, int max)	{		int cnt=0;		while (max)		{			char c = readChar();			*s++ = c;			cnt++;			max--;			if (!c)				break;		}		return cnt;	}	void	writeChar(char v)	{		write(&v,1);	}	void	writeShort(short v)	{        v = sys->convertEndian((unsigned short)v);		write(&v,2);	}	void	writeLong(long v)	{        v = sys->convertEndian((unsigned int)v);		write(&v,4);	}	void	writeTag(long v)	{		writeLong(SWAP4(v));	}	void	writeTag(char id[4])	{		write(id,4);	}	// text    int	readLine(char *in, int max);    int		readWord(char *, int);	int		readBase64(char *, int);	void	write(const char *,va_list);	void	writeLine(const char *,...);	void	writeString(const char *,...);	bool	writeCRLF;	void	updateTotals(unsigned int,unsigned int);	unsigned int totalBytesIn,totalBytesOut;	unsigned int lastBytesIn,lastBytesOut;	unsigned int bytesInPerSec,bytesOutPerSec;	unsigned int lastUpdate;};// -------------------------------------class FileStream : public Stream{public:	FileStream() {file=NULL;}    void	openReadOnly(const char *);    void	openWriteReplace(const char *);	bool	isOpen(){return file!=NULL;}	virtual void	flush();    virtual int		read(void *,int);    virtual void	write(const void *,int);    virtual bool	eof();    virtual void	rewind();    virtual void	close();	FILE *file;};// -------------------------------------class MemoryStream : public Stream{public:	MemoryStream(void *p, int l)	{		buf = (char *)p;		len = l;		pos = 0;	}	virtual int read(void *p,int l)    {		if (pos+l <= len)		{			memcpy(p,&buf[pos],l);			pos += l;			return l;		}else			return 0;    }	virtual void write(const void *p,int l)    {		if (pos+l <= len)		{			memcpy(&buf[pos],p,l);			pos += l;		}    }    virtual bool eof()    {        return pos >= len;    }	void	convertFromBase64();	char *buf;	int len,pos;};// --------------------------------------------------class IndirectStream : public Stream{public:	void init(Stream *s)	{		stream = s;	}	virtual int read(void *p,int l)    {		return stream->read(p,l);    }	virtual void write(const void *p,int l)    {		stream->write(p,l);    }    virtual bool eof()    {        return stream->eof();    }    virtual void close()    {        stream->close();    }	Stream *stream;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -