00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "LampBasic.h"
00026 #include "Core/InputOutput/TextWriter.h"
00027 #include "Core/System/StringMethod.h"
00028
00029 namespace Lamp{
00030
00031
00032
00033 TextWriter::TextWriter() : Writer(){
00034 bufferSize_ = defaultBufferSize;
00035 buffer_ = new char[bufferSize_];
00036 }
00037
00038
00039 TextWriter::~TextWriter(){
00040 delete[] buffer_;
00041 }
00042
00043
00044 void TextWriter::writeText(const String& text){
00045 writeText(text.getBytes(), text.getSize());
00046 }
00047
00048
00049 void TextWriter::writeText(const char* text){
00050 Assert(text != NULL);
00051 writeText(text, (int)StdStrlen(text));
00052 }
00053
00054
00055
00056
00057 void TextWriter::writeText(const char* text, int size){
00058 Assert(text != NULL);
00059
00060 int maxSize = size * 2;
00061 if(maxSize > bufferSize_){
00062 delete[] buffer_;
00063 while(true){
00064 bufferSize_ *= 2;
00065 if(maxSize <= bufferSize_){ break; }
00066 }
00067 buffer_ = new char[bufferSize_];
00068 }
00069
00070 int writeSize = 0;
00071 char preChar = ' ';
00072 for(int i = 0;i < size;i++){
00073 if((text[i] == '\n') && (preChar != '\r')){
00074 buffer_[writeSize] = '\r';
00075 writeSize++;
00076 }
00077 buffer_[writeSize] = text[i];
00078 preChar = text[i];
00079 writeSize++;
00080 }
00081 writeBytes(buffer_, writeSize);
00082 }
00083
00084
00085 void TextWriter::writeFormat(const char* format, ...){
00086 Assert(format != NULL);
00087 int formatBufferSize = formatDefaultBufferSize;
00088 char* formatBuffer;
00089 int writeSize;
00090 va_list args;
00091 va_start(args, format);
00092 while(true){
00093 formatBuffer = new char[formatBufferSize];
00094 writeSize = StdVsnprintf(formatBuffer, formatBufferSize, format, args);
00095 if(writeSize != -1){ break; }
00096 formatBufferSize *= 2;
00097 delete[] formatBuffer;
00098 }
00099 va_end(args);
00100
00101 writeText(formatBuffer, writeSize);
00102 delete[] formatBuffer;
00103 }
00104
00105 }
00106