Xinqi Bao's Git
4 #include "BufferWrite.hh"
13 BufferWrite::BufferWrite(std::string
& fileTarget
)
15 buffer
= new char[BUFFER_SIZE
+ POSTBUFFER_SIZE
];
16 postbuffer
= buffer
+ BUFFER_SIZE
;
18 remove(fileTarget
.c_str());
19 creat(fileTarget
.c_str(), S_IREAD
| S_IWRITE
);
20 fn
= open(fileTarget
.c_str(), O_WRONLY
| O_APPEND
);
22 BufferWrite::~BufferWrite()
29 void BufferWrite::flushOnlyBuffer()
31 size_t size
= write(fn
, buffer
, BUFFER_SIZE
);
32 // copy the stuff in postbuffer to buffer
33 for (int i
= 0; i
< phead
- postbuffer
; i
++) buffer
[i
] = postbuffer
[i
];
37 void BufferWrite::writeG0(double x
, double y
)
39 *this << "G0 F4800 X" << x
<< " Y" << y
<< '\n';
40 if (phead
>= postbuffer
) flushOnlyBuffer();
42 void BufferWrite::writeG1(double x
, double y
, double e
)
44 *this << "G1 F2000 X" << x
<< " Y" << y
<< " E" << e
<< '\n';
45 if (phead
>= postbuffer
) flushOnlyBuffer();
47 void BufferWrite::flush()
49 uint32_t sizeToWrite
= phead
- buffer
;
50 size_t size
= write(fn
, buffer
, sizeToWrite
);
54 BufferWrite
& operator<<(BufferWrite
& buf
, const char* ch
)
56 // check buffer is full or not. If full, only flush the buffer
57 for (int i
= 0; ch
[i
] != '\0'; i
++, buf
.phead
++) *buf
.phead
= ch
[i
];
60 BufferWrite
& operator<<(BufferWrite
& buf
, char ch
)
66 BufferWrite
& operator<<(BufferWrite
& buf
, std::string
& str
)
68 return buf
<< str
.c_str();
70 BufferWrite
& operator<<(BufferWrite
& buf
, double val
)
73 //TODO: translating double to string REALLY take so much time!!!
74 //TODO: make our own doubleToString()
75 //snprintf(buf.phead, 9, "%lf", val);
77 std::string str
= std::to_string(val
);
80 #if 1 // faster way for DoubleToString
81 buf
.phead
= formatDouble(val
, buf
.phead
);