-void Serializer::mywrite(const void *__buf, size_t __n){
- write (filedesc, __buf, __n);
+void Serializer::mywrite(const void *__buf, size_t __n) {
+ if (__n > SERIALBUFFERLENGTH *2) {
+ if (bufferoffset != 0)
+ flushBuffer();
+ write(filedesc, __buf, __n);
+ } else {
+ char *towrite=(char *) __buf;
+ do {
+ uint spacefree = bufferlength-bufferoffset;
+ uint datatowrite = spacefree > __n ? __n : spacefree;
+ memcpy(&buffer[bufferoffset], towrite, datatowrite);
+ bufferoffset += datatowrite;
+
+ if (spacefree < __n) {
+ flushBuffer();
+ towrite += datatowrite;
+ } else if (spacefree == __n) {
+ flushBuffer();
+ return;
+ } else {
+ return;
+ }
+ } while(true);
+ }