Return to filestream_n.h CVS log | Up to Nevrax / code / nelns / agent_service |
File: Nevrax / code / nelns / agent_service / Attic / filestream_n.h (download) Revision 1.1, Wed Apr 18 13:54:25 2001 UTC (15 months, 1 week ago) by valignat Branch: MAIN RENAMED code/server to code/nelns. |
#ifndef NELNS_FILE_STREAM_H #define NELNS_FILE_STREAM_H #include "stdio.h" #include <ostream> #include <istream> #include "nel/misc/stream.h" sint64 atoiInt64(const char *ident,sint64 base = 10) { uint64 k = 0; while(*ident != 0) { switch(*(ident++)) { case '0': k +=0; break; case '1': k +=1; break; case '2': k +=2; break; case '3': k +=3; break; case '4': k +=4; break; case '5': k +=5; break; case '6': k +=6; break; case '7': k +=7; break; case '8': k +=8; break; case '9': k +=9; break; case 'a': k +=10; break; case 'b': k +=11; break; case 'c': k +=12; break; case 'd': k +=13; break; case 'e': k +=14; break; case 'f': k +=15; break; case 'A': k +=10; break; case 'B': k +=11; break; case 'C': k +=12; break; case 'D': k +=13; break; case 'E': k +=14; break; case 'F': k +=15; break; case 0: return k; break; } if(*ident != 0) k *= base; } return k; } void itoaInt64(sint64 numbre,char *str,sint64 base = 10) { str[0] = 0; char b[256]; if(!numbre) { str[0] = '0'; str[1] = 0; } memset(b,0,255); memset(b,'0',64); sint n; uint64 x = numbre; char baseTable[] = "0123456789abcdef"; for(n = 0; n < 64; n ++) { sint num = (sint)(x % base); b[64 - n] = baseTable[num]; if(!x) { int k; int j = 0; for(k = 64 - n + 1; k <= 64; k++) { str[j ++] = b[k]; } str[j] = 0; break; } x /= base; } } class CCharOStream: public NLMISC::IStream { private: std::ostream &_Os; public: CCharOStream(std::ostream *os):NLMISC::IStream(false,false), _Os(*os) { } virtual void serial(uint8 &b) throw(NLMISC::EStream) { char text[100]; sprintf(text,"%d",b); _Os << text << std::endl; } virtual void serial(sint8 &b) throw(NLMISC::EStream) { char text[100]; sprintf(text,"%d",b); _Os << text << std::endl; } virtual void serial(uint16 &b) throw(NLMISC::EStream) { char text[100]; sprintf(text,"%d",b); _Os << text << std::endl; } virtual void serial(sint16 &b) throw(NLMISC::EStream) { char text[100]; sprintf(text,"%d",b); _Os << text << std::endl; } virtual void serial(uint32 &b) throw(NLMISC::EStream) { char text[100]; sprintf(text,"%d",b); _Os << text << std::endl; } virtual void serial(sint32 &b) throw(NLMISC::EStream) { char text[100]; sprintf(text,"%d",b); _Os << text << std::endl; } virtual void serial(uint64 &b) throw(NLMISC::EStream) { char text[100]; itoaInt64((sint64)b,text); _Os << text << std::endl; } virtual void serial(sint64 &b) throw(NLMISC::EStream) { char text[100]; itoaInt64(b,text,10); _Os << text << std::endl; } virtual void serial(float &b) throw(NLMISC::EStream) { _Os << b << std::endl; } virtual void serial(double &b) throw(NLMISC::EStream) { _Os << b << std::endl; } virtual void serial(bool &b) throw(NLMISC::EStream) { char text[100]; sprintf(text,"%d",b); _Os << text << std::endl; } #ifndef NL_OS_CYGWIN virtual void serial(char &b) throw(NLMISC::EStream) { char text[100]; sprintf(text,"%d",b); _Os << text << std::endl; } #endif virtual void serial(std::string &b) throw(NLMISC::EStream) { _Os << strlen(b.data()) + 1; _Os << " "; _Os << b << std::endl; } virtual void serial(ucstring &b) throw(NLMISC::EStream) { } virtual void serialBuffer(uint8 *buf, uint len)throw(NLMISC::EReadError) { } virtual void serialBit(bool &bit) throw(NLMISC::EReadError) { } ~CCharOStream() { } }; class CCharIStream: public NLMISC::IStream { private: std::istream &_Is; public: CCharIStream(std::istream *is):NLMISC::IStream(true,false), _Is(*is) { } virtual void serial(uint8 &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (uint8)atoi(text); } virtual void serial(sint8 &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (sint8)atoi(text); } virtual void serial(uint16 &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (uint16)atoi(text); } virtual void serial(sint16 &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (sint16)atoi(text); } virtual void serial(uint32 &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (uint32)atoi(text); } virtual void serial(sint32 &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (sint32)atoi(text); } virtual void serial(uint64 &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (uint64)atoiInt64(text); } virtual void serial(sint64 &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = atoiInt64(text); } virtual void serial(float &b) throw(NLMISC::EStream) { _Is >> b; } virtual void serial(double &b) throw(NLMISC::EStream) { _Is >> b; } virtual void serial(bool &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (atoi(text) != 0); } #ifndef NL_OS_CYGWIN virtual void serial(char &b) throw(NLMISC::EStream) { char text[100]; _Is >> text; b = (char)atoi(text); } #endif virtual void serial(std::string &b) throw(NLMISC::EStream) { int i; _Is >> i; char *t = new char [i + 1]; _Is.read(t,i); t[i] = 0; std::string s(&t[1]); b = s; delete t; } virtual void serial(ucstring &b) throw(NLMISC::EStream) { } virtual void serialBuffer(uint8 *buf, uint len)throw(NLMISC::EReadError) { } virtual void serialBit(bool &bit) throw(NLMISC::EReadError) { } ~CCharIStream() { } }; #endif