00001 /** 00002 * @file OutStreams.h 00003 * 00004 * Declaration of out stream classes for different media and formats. 00005 * 00006 * @author Thomas Röfer 00007 * @author Martin Lötzsch 00008 */ 00009 00010 #ifndef __OutStreams_h_ 00011 #define __OutStreams_h_ 00012 00013 #include "InOut.h" 00014 #include "Platform/File.h" 00015 #include <string.h> 00016 00017 /** 00018 * @class PhysicalOutStream 00019 * 00020 * The base class for physical out streams. Derivates of PhysicalOutStream only handle the 00021 * writing of data to a medium, not of formating data. 00022 */ 00023 class PhysicalOutStream 00024 { 00025 public: 00026 /** 00027 * The function writes a number of bytes into a physical stream. 00028 * @param p The address the data is located at. 00029 * @param size The number of bytes to be written. 00030 */ 00031 virtual void writeToStream(const void* p,int size) = 0; 00032 00033 }; 00034 00035 /** 00036 * @class StreamWriter 00037 * 00038 * Generic class for formating data to be used in streams. 00039 * The physical writing is then done by OutStream derivates. 00040 */ 00041 class StreamWriter 00042 { 00043 protected: 00044 /** 00045 * Writes a character to a stream. 00046 * @param d the data to write. 00047 * @param stream the stream to write on. 00048 */ 00049 virtual void writeChar(char d, PhysicalOutStream& stream) = 0; 00050 00051 /** 00052 * Writes a unsigned character to a stream. 00053 * @param d the data to write. 00054 * @param stream the stream to write on. 00055 */ 00056 virtual void writeUChar(unsigned char d, PhysicalOutStream& stream) = 0; 00057 00058 /** 00059 * Writes a short to a stream. 00060 * @param d the data to write. 00061 * @param stream the stream to write on. 00062 */ 00063 virtual void writeShort(short d, PhysicalOutStream& stream) = 0; 00064 00065 /** 00066 * Writes a unsigned short to a stream. 00067 * @param d the data to write. 00068 * @param stream the stream to write on. 00069 */ 00070 virtual void writeUShort(unsigned short d, PhysicalOutStream& stream) = 0; 00071 00072 /** 00073 * Writes a int to a stream. 00074 * @param d the data to write. 00075 * @param stream the stream to write on. 00076 */ 00077 virtual void writeInt(int d, PhysicalOutStream& stream) = 0; 00078 00079 /** 00080 * Writes a unsigned int to a stream. 00081 * @param d the data to write. 00082 * @param stream the stream to write on. 00083 */ 00084 virtual void writeUInt(unsigned int d, PhysicalOutStream& stream) = 0; 00085 00086 /** 00087 * Writes a long to a stream. 00088 * @param d the data to write. 00089 * @param stream the stream to write on. 00090 */ 00091 virtual void writeLong(long d, PhysicalOutStream& stream) = 0; 00092 00093 /** 00094 * Writes a unsigned long to a stream. 00095 * @param d the data to write. 00096 * @param stream the stream to write on. 00097 */ 00098 virtual void writeULong(unsigned long d, PhysicalOutStream& stream) = 0; 00099 00100 /** 00101 * Writes a float to a stream. 00102 * @param d the data to write. 00103 * @param stream the stream to write on. 00104 */ 00105 virtual void writeFloat(float d, PhysicalOutStream& stream) = 0; 00106 00107 /** 00108 * Writes a double to a stream. 00109 * @param d the data to write. 00110 * @param stream the stream to write on. 00111 */ 00112 virtual void writeDouble(double d, PhysicalOutStream& stream) = 0; 00113 00114 /** 00115 * Writes a string to a stream. 00116 * @param d the data to write. 00117 * @param stream the stream to write on. 00118 */ 00119 virtual void writeString(const char *d, PhysicalOutStream& stream) = 0; 00120 00121 /** 00122 * Writes a 'end of line' to a stream. 00123 * @param stream the stream to write on. 00124 */ 00125 virtual void writeEndL(PhysicalOutStream& stream) = 0; 00126 00127 /** 00128 * The function writes a number of bytes into the stream. 00129 * @param p The address the data is located at. 00130 * @param size The number of bytes to be written. 00131 * @param stream the stream to write on. 00132 */ 00133 virtual void writeData(const void* p,int size, PhysicalOutStream& stream) = 0; 00134 }; 00135 00136 00137 /** 00138 * @class OutStream 00139 * 00140 * Generic class for classes that do both formating and physical writing of data to streams. 00141 */ 00142 template <class S, class W> class OutStream : public S, public W, public Out 00143 { 00144 public: 00145 /** Standard constructor */ 00146 OutStream() {}; 00147 00148 /** 00149 * The function writes a number of bytes into a stream. 00150 * @param p The address the data is located at. 00151 * @param size The number of bytes to be written. 00152 */ 00153 virtual void write(const void* p,int size) 00154 { writeData(p, size, *this); } 00155 00156 protected: 00157 /** 00158 * Virtual redirection for operator<<(const char& value). 00159 */ 00160 virtual void outChar(char d) 00161 { writeChar(d,*this); } 00162 00163 /** 00164 * Virtual redirection for operator<<(const unsigned char& value). 00165 */ 00166 virtual void outUChar(unsigned char d) 00167 { writeUChar(d,*this); } 00168 00169 /** 00170 * Virtual redirection for operator<<(const short& value). 00171 */ 00172 virtual void outShort(short d) 00173 { writeShort(d,*this); } 00174 00175 /** 00176 * Virtual redirection for operator<<(const unsigned short& value). 00177 */ 00178 virtual void outUShort(unsigned short d) 00179 { writeUShort(d,*this); } 00180 00181 /** 00182 * Virtual redirection for operator<<(const int& value). 00183 */ 00184 virtual void outInt(int d) 00185 { writeInt(d,*this); } 00186 00187 /** 00188 * Virtual redirection for operator<<(const unsigned& value). 00189 */ 00190 virtual void outUInt(unsigned int d) 00191 { writeUInt(d,*this); } 00192 00193 /** 00194 * Virtual redirection for operator<<(const long& value). 00195 */ 00196 virtual void outLong(long d) 00197 { writeLong(d,*this); } 00198 00199 /** 00200 * Virtual redirection for operator<<(const unsigned long& value). 00201 */ 00202 virtual void outULong(unsigned long d) 00203 { writeULong(d,*this); } 00204 00205 /** 00206 * Virtual redirection for operator<<(const float& value). 00207 */ 00208 virtual void outFloat(float d) 00209 { writeFloat(d,*this); } 00210 00211 /** 00212 * Virtual redirection for operator<<(const double& value). 00213 */ 00214 virtual void outDouble(double d) 00215 { writeDouble(d,*this); } 00216 00217 /** 00218 * Virtual redirection for operator<<(const char* value). 00219 */ 00220 virtual void outString(const char *d) 00221 { writeString(d,*this); } 00222 00223 00224 /** 00225 * Virtual redirection for operator<<(Out& (*f)(Out&)) that writes 00226 * the symbol "endl"; 00227 */ 00228 virtual void outEndL() 00229 { writeEndL(*this); } 00230 }; 00231 00232 00233 /** 00234 * @class OutBinary 00235 * 00236 * Formats data binary to be used in streams. 00237 * The physical writing is then done by OutStream derivates. 00238 */ 00239 class OutBinary : public StreamWriter 00240 { 00241 protected: 00242 /** 00243 * Writes a character to a stream. 00244 * @param d the data to write. 00245 * @param stream the stream to write on. 00246 */ 00247 virtual void writeChar(char d, PhysicalOutStream& stream) 00248 { stream.writeToStream(&d,sizeof(d)); } 00249 00250 /** 00251 * Writes a unsigned character to a stream. 00252 * @param d the data to write. 00253 * @param stream the stream to write on. 00254 */ 00255 virtual void writeUChar(unsigned char d, PhysicalOutStream& stream) 00256 { stream.writeToStream(&d,sizeof(d)); } 00257 00258 /** 00259 * Writes a short to a stream. 00260 * @param d the data to write. 00261 * @param stream the stream to write on. 00262 */ 00263 virtual void writeShort(short d, PhysicalOutStream& stream) 00264 { stream.writeToStream(&d,sizeof(d)); } 00265 00266 /** 00267 * Writes a unsigned short to a stream. 00268 * @param d the data to write. 00269 * @param stream the stream to write on. 00270 */ 00271 virtual void writeUShort(unsigned short d, PhysicalOutStream& stream) 00272 { stream.writeToStream(&d,sizeof(d)); } 00273 00274 /** 00275 * Writes a int to a stream. 00276 * @param d the data to write. 00277 * @param stream the stream to write on. 00278 */ 00279 virtual void writeInt(int d, PhysicalOutStream& stream) 00280 { stream.writeToStream(&d,sizeof(d)); } 00281 00282 /** 00283 * Writes a unsigned int to a stream. 00284 * @param d the data to write. 00285 * @param stream the stream to write on. 00286 */ 00287 virtual void writeUInt(unsigned int d, PhysicalOutStream& stream) 00288 { stream.writeToStream(&d,sizeof(d)); } 00289 00290 /** 00291 * Writes a long to a stream. 00292 * @param d the data to write. 00293 * @param stream the stream to write on. 00294 */ 00295 virtual void writeLong(long d, PhysicalOutStream& stream) 00296 { stream.writeToStream(&d,sizeof(d)); } 00297 00298 /** 00299 * Writes a unsigned long to a stream. 00300 * @param d the data to write. 00301 * @param stream the stream to write on. 00302 */ 00303 virtual void writeULong(unsigned long d, PhysicalOutStream& stream) 00304 { stream.writeToStream(&d,sizeof(d)); } 00305 00306 /** 00307 * Writes a float to a stream. 00308 * @param d the data to write. 00309 * @param stream the stream to write on. 00310 */ 00311 virtual void writeFloat(float d, PhysicalOutStream& stream) 00312 { stream.writeToStream(&d,sizeof(d)); } 00313 00314 /** 00315 * Writes a double to a stream. 00316 * @param d the data to write. 00317 * @param stream the stream to write on. 00318 */ 00319 virtual void writeDouble(double d, PhysicalOutStream& stream) 00320 { stream.writeToStream(&d,sizeof(d)); } 00321 00322 /** 00323 * Writes a string to a stream. 00324 * @param d the data to write. 00325 * @param stream the stream to write on. 00326 */ 00327 virtual void writeString(const char *d, PhysicalOutStream& stream) 00328 { int size = (int)strlen(d); stream.writeToStream(&size,sizeof(size)); stream.writeToStream(d,size);} 00329 00330 /** 00331 * Writes a 'end of line' to a stream. 00332 * @param stream the stream to write on. 00333 */ 00334 virtual void writeEndL(PhysicalOutStream& stream) {}; 00335 00336 /** 00337 * The function writes a number of bytes into the stream. 00338 * @param p The address the data is located at. 00339 * @param size The number of bytes to be written. 00340 * @param stream the stream to write on. 00341 */ 00342 virtual void writeData(const void* p,int size, PhysicalOutStream& stream) 00343 { stream.writeToStream(p,size); } 00344 00345 }; 00346 00347 /** 00348 * @class OutText 00349 * 00350 * Formats data as text to be used in streams. 00351 * The physical writing is then done by PhysicalOutStream derivates. 00352 */ 00353 class OutText : public StreamWriter 00354 { 00355 private: 00356 /** A buffer for formatting the numeric data to a text format. */ 00357 char buf[50]; 00358 protected: 00359 /** 00360 * Writes a character to a stream. 00361 * @param d the data to write. 00362 * @param stream the stream to write on. 00363 */ 00364 virtual void writeChar(char d, PhysicalOutStream& stream) 00365 { sprintf(buf," %d",int(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00366 00367 /** 00368 * Writes a unsigned character to a stream. 00369 * @param d the data to write. 00370 * @param stream the stream to write on. 00371 */ 00372 virtual void writeUChar(unsigned char d, PhysicalOutStream& stream) 00373 { sprintf(buf," %u",int(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00374 00375 /** 00376 * Writes a short to a stream. 00377 * @param d the data to write. 00378 * @param stream the stream to write on. 00379 */ 00380 virtual void writeShort(short d, PhysicalOutStream& stream) 00381 { sprintf(buf," %d",int(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00382 00383 /** 00384 * Writes a unsigned short to a stream. 00385 * @param d the data to write. 00386 * @param stream the stream to write on. 00387 */ 00388 virtual void writeUShort(unsigned short d, PhysicalOutStream& stream) 00389 { sprintf(buf," %u",int(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00390 00391 /** 00392 * Writes a int to a stream. 00393 * @param d the data to write. 00394 * @param stream the stream to write on. 00395 */ 00396 virtual void writeInt(int d, PhysicalOutStream& stream) 00397 { sprintf(buf," %d",d); stream.writeToStream(buf,(int)strlen(buf)); } 00398 00399 /** 00400 * Writes a unsigned int to a stream. 00401 * @param d the data to write. 00402 * @param stream the stream to write on. 00403 */ 00404 virtual void writeUInt(unsigned int d, PhysicalOutStream& stream) 00405 { sprintf(buf," %u",d); stream.writeToStream(buf,(int)strlen(buf)); } 00406 00407 /** 00408 * Writes a long to a stream. 00409 * @param d the data to write. 00410 * @param stream the stream to write on. 00411 */ 00412 virtual void writeLong(long d, PhysicalOutStream& stream) 00413 { sprintf(buf," %ld",d); stream.writeToStream(buf,(int)strlen(buf)); } 00414 00415 /** 00416 * Writes a unsigned long to a stream. 00417 * @param d the data to write. 00418 * @param stream the stream to write on. 00419 */ 00420 virtual void writeULong(unsigned long d, PhysicalOutStream& stream) 00421 { sprintf(buf," %lu",d); stream.writeToStream(buf,(int)strlen(buf)); } 00422 00423 /** 00424 * Writes a float to a stream. 00425 * @param d the data to write. 00426 * @param stream the stream to write on. 00427 */ 00428 virtual void writeFloat(float d, PhysicalOutStream& stream) 00429 { sprintf(buf," %g",double(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00430 00431 /** 00432 * Writes a double to a stream. 00433 * @param d the data to write. 00434 * @param stream the stream to write on. 00435 */ 00436 virtual void writeDouble(double d, PhysicalOutStream& stream) 00437 { sprintf(buf," %g",d); stream.writeToStream(buf,(int)strlen(buf)); } 00438 00439 /** 00440 * Writes a string to a stream. 00441 * @param d the data to write. 00442 * @param stream the stream to write on. 00443 */ 00444 virtual void writeString(const char *d, PhysicalOutStream& stream); 00445 00446 /** 00447 * Writes a 'end of line' to a stream. 00448 * @param stream the stream to write on. 00449 */ 00450 virtual void writeEndL(PhysicalOutStream& stream) 00451 { sprintf(buf,"\r\n"); stream.writeToStream(buf,(int)strlen(buf)); } 00452 00453 /** 00454 * The function writes a number of bytes into the stream. 00455 * @param p The address the data is located at. 00456 * @param size The number of bytes to be written. 00457 * @param stream the stream to write on. 00458 */ 00459 virtual void writeData(const void* p,int size, PhysicalOutStream& stream); 00460 }; 00461 00462 /** 00463 * @class OutTextRaw 00464 * 00465 * Formats data as raw text to be used in streams. 00466 * The physical writing is then done by PhysicalOutStream derivates. 00467 * Different from OutText, OutTextRaw does not escape spaces 00468 * and other special characters and no spaces are inserted before numbers. 00469 * (The result of the OutTextRaw StreamWriter is the same as the result of "std::cout") 00470 */ 00471 class OutTextRaw : public StreamWriter 00472 { 00473 private: 00474 /** A buffer for formatting the numeric data to a text format. */ 00475 char buf[50]; 00476 protected: 00477 /** 00478 * Writes a character to a stream. 00479 * @param d the data to write. 00480 * @param stream the stream to write on. 00481 */ 00482 virtual void writeChar(char d, PhysicalOutStream& stream) 00483 { sprintf(buf,"%d",int(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00484 00485 /** 00486 * Writes a unsigned character to a stream. 00487 * @param d the data to write. 00488 * @param stream the stream to write on. 00489 */ 00490 virtual void writeUChar(unsigned char d, PhysicalOutStream& stream) 00491 { sprintf(buf,"%u",int(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00492 00493 /** 00494 * Writes a short to a stream. 00495 * @param d the data to write. 00496 * @param stream the stream to write on. 00497 */ 00498 virtual void writeShort(short d, PhysicalOutStream& stream) 00499 { sprintf(buf,"%d",int(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00500 00501 /** 00502 * Writes a unsigned short to a stream. 00503 * @param d the data to write. 00504 * @param stream the stream to write on. 00505 */ 00506 virtual void writeUShort(unsigned short d, PhysicalOutStream& stream) 00507 { sprintf(buf,"%u",int(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00508 00509 /** 00510 * Writes a int to a stream. 00511 * @param d the data to write. 00512 * @param stream the stream to write on. 00513 */ 00514 virtual void writeInt(int d, PhysicalOutStream& stream) 00515 { sprintf(buf,"%d",d); stream.writeToStream(buf,(int)strlen(buf)); } 00516 00517 /** 00518 * Writes a unsigned int to a stream. 00519 * @param d the data to write. 00520 * @param stream the stream to write on. 00521 */ 00522 virtual void writeUInt(unsigned int d, PhysicalOutStream& stream) 00523 { sprintf(buf,"%u",d); stream.writeToStream(buf,(int)strlen(buf)); } 00524 00525 /** 00526 * Writes a long to a stream. 00527 * @param d the data to write. 00528 * @param stream the stream to write on. 00529 */ 00530 virtual void writeLong(long d, PhysicalOutStream& stream) 00531 { sprintf(buf,"%ld",d); stream.writeToStream(buf,(int)strlen(buf)); } 00532 00533 /** 00534 * Writes a unsigned long to a stream. 00535 * @param d the data to write. 00536 * @param stream the stream to write on. 00537 */ 00538 virtual void writeULong(unsigned long d, PhysicalOutStream& stream) 00539 { sprintf(buf,"%lu",d); stream.writeToStream(buf,(int)strlen(buf)); } 00540 00541 /** 00542 * Writes a float to a stream. 00543 * @param d the data to write. 00544 * @param stream the stream to write on. 00545 */ 00546 virtual void writeFloat(float d, PhysicalOutStream& stream) 00547 { sprintf(buf,"%g",double(d)); stream.writeToStream(buf,(int)strlen(buf)); } 00548 00549 /** 00550 * Writes a double to a stream. 00551 * @param d the data to write. 00552 * @param stream the stream to write on. 00553 */ 00554 virtual void writeDouble(double d, PhysicalOutStream& stream) 00555 { sprintf(buf,"%g",d); stream.writeToStream(buf,(int)strlen(buf)); } 00556 00557 /** 00558 * Writes a string to a stream. 00559 * @param d the data to write. 00560 * @param stream the stream to write on. 00561 */ 00562 virtual void writeString(const char *d, PhysicalOutStream& stream); 00563 00564 /** 00565 * Writes a 'end of line' to a stream. 00566 * @param stream the stream to write on. 00567 */ 00568 virtual void writeEndL(PhysicalOutStream& stream) 00569 { sprintf(buf,"\r\n"); stream.writeToStream(buf,(int)strlen(buf)); } 00570 00571 /** 00572 * The function writes a number of bytes into the stream. 00573 * @param p The address the data is located at. 00574 * @param size The number of bytes to be written. 00575 * @param stream the stream to write on. 00576 */ 00577 virtual void writeData(const void* p,int size, PhysicalOutStream& stream); 00578 }; 00579 00580 00581 00582 /** 00583 * @class OutFile. 00584 * 00585 * An PhysicalOutStream that writes the data to a file. 00586 */ 00587 class OutFile : public PhysicalOutStream 00588 { 00589 private: 00590 File* stream; /**< Object representing the file. */ 00591 00592 public: 00593 /** Default constructor */ 00594 OutFile() : stream(0) {}; 00595 00596 /** Destructor */ 00597 ~OutFile() { if (stream != 0) delete stream; } 00598 00599 /** 00600 * The function states whether the file actually exists. 00601 * @return Does the file exist? 00602 */ 00603 virtual bool exists() const {return (stream != 0 ? stream->exists() : false);} 00604 00605 protected: 00606 /** 00607 * Opens the stream. 00608 * @param name The name of the file to open. It will be interpreted 00609 * as relative to the configuration directory. If the file 00610 * does not exist, it will be created. If it already 00611 * exists, its previous contents will be discared. 00612 */ 00613 void open(const char* name) 00614 { stream=new File(name,"wb"); } 00615 00616 /** 00617 * Opens the stream. 00618 * @param name The name of the file to open. It will be interpreted 00619 * as relative to the configuration directory. If the file 00620 * does not exist, it will be created. If it already 00621 * exists, its previous contents will be preserved, 00622 * if append = true. 00623 * @param append Determines, if the file content is preserved or discared. 00624 */ 00625 void open(const char* name, bool append) 00626 { stream = append ? new File(name,"ab") : new File(name,"wb");} 00627 00628 /** 00629 * The function writes a number of bytes into the file. 00630 * @param p The address the data is located at. 00631 * @param size The number of bytes to be written. 00632 */ 00633 virtual void writeToStream(const void *p,int size) 00634 { if (stream!=0) stream->write(p,size); } 00635 }; 00636 00637 /** 00638 * @class OutMemory. 00639 * 00640 * A PhysicalOutStream that writes the data to a memory block. 00641 */ 00642 class OutMemory : public PhysicalOutStream 00643 { 00644 private: 00645 char* memory; /**< Points to the next byte to write at. */ 00646 int length; /**< The number of stored bytes */ 00647 void* start; /**< Points to the first byte */ 00648 00649 public: 00650 /** Default constructor */ 00651 OutMemory() : memory(0), length(0), start(0) {} 00652 00653 /** 00654 * Returns the number of written bytes 00655 */ 00656 int getLength() { return length; } 00657 00658 /** 00659 * Returns the address of the first byte 00660 */ 00661 void* getMemory() { return start; } 00662 00663 protected: 00664 /** 00665 * opens the stream. 00666 * @param mem The address of the memory block into which is written. 00667 */ 00668 void open(void* mem) 00669 { memory = (char*)mem; start = mem; length = 0;} 00670 00671 /** 00672 * The function writes a number of bytes into memory. 00673 * @param p The address the data is located at. 00674 * @param size The number of bytes to be written. 00675 */ 00676 virtual void writeToStream(const void *p, int size) 00677 { if(memory != 0) { memcpy(memory,p,size); memory += size; length += size; } } 00678 }; 00679 00680 /** 00681 * @class OutSize. 00682 * 00683 * A PhysicalOutStream that doesn't write any data. Instead it works as a 00684 * counter that determines how many bytes would be streamed into memory. 00685 * It can be used to determine the size of the memory block that is 00686 * required as the parameter for an instance of class OutMemoryStream. 00687 */ 00688 class OutSize : public PhysicalOutStream 00689 { 00690 private: 00691 unsigned size; /**< Accumulator of the required number of bytes. */ 00692 00693 public: 00694 /** 00695 * The function resets the counter to zero. 00696 */ 00697 void reset() {size = 0;} 00698 00699 /** 00700 * Constructor. 00701 */ 00702 OutSize() {reset();} 00703 00704 /** 00705 * The function returns the number of bytes required to store the 00706 * data written so far. 00707 * @return The size of the memory block required for the data written. 00708 */ 00709 unsigned getSize() const {return size;} 00710 00711 protected: 00712 /** 00713 * The function counts the number of bytes that should be written. 00714 * @param p The address the data is located at. 00715 * @param s The number of bytes to be written. 00716 */ 00717 virtual void writeToStream(const void* p,int s) {size += s;} 00718 00719 }; 00720 00721 /** 00722 * @class OutBinaryFile 00723 * 00724 * A binary stream into a file. 00725 */ 00726 class OutBinaryFile : public OutStream<OutFile,OutBinary> 00727 { 00728 public: 00729 /** 00730 * Constructor. 00731 * @param name The name of the file to open. It will be interpreted 00732 * as relative to the configuration directory. If the file 00733 * does not exist, it will be created. If it already 00734 * exists, its previous contents will be discared. 00735 */ 00736 OutBinaryFile(const char* name) 00737 { open(name); } 00738 00739 /** 00740 * Constructor. 00741 * @param name The name of the file to open. It will be interpreted 00742 * as relative to the configuration directory. If the file 00743 * does not exist, it will be created. If it already 00744 * exists, its previous contents will be preserved, 00745 * if append = true. 00746 * @param append Determines, if the file content is preserved or discared. 00747 */ 00748 OutBinaryFile(const char* name, bool append) 00749 { open(name, append); } 00750 }; 00751 00752 /** 00753 * @class OutBinaryMemory 00754 * 00755 * A binary stream into a memory region. 00756 */ 00757 class OutBinaryMemory : public OutStream<OutMemory,OutBinary> 00758 { 00759 public: 00760 /** 00761 * Constructor. 00762 * @param mem The address of the memory block into which is written. 00763 */ 00764 OutBinaryMemory(void* mem) 00765 { open(mem); } 00766 }; 00767 00768 /** 00769 * @class OutBinarySize 00770 * 00771 * A binary stream size counter 00772 */ 00773 class OutBinarySize : public OutStream<OutSize,OutBinary> 00774 { 00775 public: 00776 /** 00777 * Constructor. 00778 */ 00779 OutBinarySize() {} 00780 }; 00781 00782 /** 00783 * @class OutTextFile 00784 * 00785 * A text stream into a file. 00786 */ 00787 class OutTextFile : public OutStream<OutFile,OutText> 00788 { 00789 public: 00790 /** 00791 * Constructor. 00792 * @param name The name of the file to open. It will be interpreted 00793 * as relative to the configuration directory. If the file 00794 * does not exist, it will be created. If it already 00795 * exists, its previous contents will be discared. 00796 */ 00797 OutTextFile(const char* name) 00798 { open(name); } 00799 00800 /** 00801 * Constructor. 00802 * @param name The name of the file to open. It will be interpreted 00803 * as relative to the configuration directory. If the file 00804 * does not exist, it will be created. If it already 00805 * exists, its previous contents will be preserved, 00806 * if append = true. 00807 * @param append Determines, if the file content is preserved or discared. 00808 */ 00809 OutTextFile(const char* name, bool append) 00810 { open(name, append); } 00811 }; 00812 00813 /** 00814 * @class OutTextRawFile 00815 * 00816 * A text stream into a file. 00817 */ 00818 class OutTextRawFile : public OutStream<OutFile,OutTextRaw> 00819 { 00820 public: 00821 /** 00822 * Constructor. 00823 * @param name The name of the file to open. It will be interpreted 00824 * as relative to the configuration directory. If the file 00825 * does not exist, it will be created. If it already 00826 * exists, its previous contents will be discared. 00827 */ 00828 OutTextRawFile(const char* name) 00829 { open(name); } 00830 00831 /** 00832 * Constructor. 00833 * @param name The name of the file to open. It will be interpreted 00834 * as relative to the configuration directory. If the file 00835 * does not exist, it will be created. If it already 00836 * exists, its previous contents will be preserved, 00837 * if append = true. 00838 * @param append Determines, if the file content is preserved or discared. 00839 */ 00840 OutTextRawFile(const char* name, bool append) 00841 { open(name, append); } 00842 }; 00843 00844 /** 00845 * @class OutTextMemory 00846 * 00847 * A text stream into a memory region. 00848 */ 00849 class OutTextMemory : public OutStream<OutMemory,OutText> 00850 { 00851 public: 00852 /** 00853 * Constructor. 00854 * @param mem The address of the memory block into which is written. 00855 */ 00856 OutTextMemory(void* mem) 00857 { open(mem); } 00858 }; 00859 00860 /** 00861 * @class OutTextRawMemory 00862 * 00863 * A text stream into a memory region. 00864 */ 00865 class OutTextRawMemory : public OutStream<OutMemory,OutTextRaw> 00866 { 00867 public: 00868 /** 00869 * Constructor. 00870 * @param mem The address of the memory block into which is written. 00871 */ 00872 OutTextRawMemory(void* mem) 00873 { open(mem); } 00874 }; 00875 00876 /** 00877 * @class OutTextSize 00878 * 00879 * A Text stream size counter 00880 */ 00881 class OutTextSize : public OutStream<OutSize,OutText> 00882 { 00883 public: 00884 /** 00885 * Constructor. 00886 */ 00887 OutTextSize() {} 00888 }; 00889 00890 /** 00891 * @class OutTextRawSize 00892 * 00893 * A Text stream size counter 00894 */ 00895 class OutTextRawSize : public OutStream<OutSize,OutTextRaw> 00896 { 00897 public: 00898 /** 00899 * Constructor. 00900 */ 00901 OutTextRawSize() {} 00902 }; 00903 00904 00905 00906 #endif //__OutStreams_h_ 00907 00908 /* 00909 * Change Log: 00910 * 00911 * $Log: OutStreams.h,v $ 00912 * Revision 1.1.1.1 2004/05/22 17:37:40 cvsadm 00913 * created new repository GT2004_WM 00914 * 00915 * Revision 1.6 2004/01/28 20:52:33 loetzsch 00916 * Added the OutTextRaw stream writer. 00917 * 00918 * Revision 1.5 2004/01/22 12:38:12 dueffert 00919 * flush removed because it doesnt work properly on robots 00920 * 00921 * Revision 1.4 2004/01/16 15:46:47 dueffert 00922 * flush added to File and OutFile 00923 * 00924 * Revision 1.3 2003/11/30 01:53:21 loetzsch 00925 * prepared RobotControl port to Visual C++ .Net 00926 * 00927 * Revision 1.2 2003/11/29 07:53:53 roefer 00928 * sprintf using %f resulted in buffer overflows. Now using %g. 00929 * 00930 * Revision 1.1 2003/10/07 10:13:24 cvsadm 00931 * Created GT2004 (M.J.) 00932 * 00933 * Revision 1.1.1.1 2003/07/02 09:40:29 cvsadm 00934 * created new repository for the competitions in Padova from the 00935 * tamara CVS (Tuesday 2:00 pm) 00936 * 00937 * removed unused solutions 00938 * 00939 * Revision 1.5 2003/03/06 11:55:00 dueffert 00940 * parameter type warnings removed 00941 * 00942 * Revision 1.4 2003/01/23 22:17:44 cesarz 00943 * added append mode also for OutBinaryFile. 00944 * 00945 * Revision 1.3 2003/01/23 14:22:26 cesarz 00946 * added append support for OutTextFile 00947 * 00948 * Revision 1.2 2002/10/14 13:14:24 dueffert 00949 * doxygen comments corrected 00950 * 00951 * Revision 1.1 2002/09/10 15:53:59 cvsadm 00952 * Created new project GT2003 (M.L.) 00953 * - Cleaned up the /Src/DataTypes directory 00954 * - Removed challenge related source code 00955 * - Removed processing of incoming audio data 00956 * - Renamed AcousticMessage to SoundRequest 00957 * 00958 * Revision 1.1 2002/07/23 13:46:43 loetzsch 00959 * - new streaming classes 00960 * 00961 */