replaced separate inbuf and outbuf with iobuf

This commit is contained in:
Bob Polis 2020-04-24 17:45:33 +02:00
parent db6b0cca5e
commit e9fa798ee7
2 changed files with 16 additions and 33 deletions

View File

@ -1,5 +1,5 @@
// //
// fdostream.cpp // fdiobuf.cpp
// libscio // libscio
// //
// Created by Bob Polis at 2020-02-14 // Created by Bob Polis at 2020-02-14
@ -14,7 +14,20 @@
#include <unistd.h> #include <unistd.h>
#endif #endif
std::streambuf::int_type sc::io::fdoutbuf::overflow(std::streambuf::int_type c) { std::streambuf::int_type sc::io::fdiobuf::underflow() {
int num = ::read(_fd, &_ch, 1);
if (num <= 0) {
return EOF;
}
setg(&_ch, &_ch, &_ch + 1);
return _ch;
}
std::streamsize sc::io::fdiobuf::xsgetn(char* s, std::streamsize n) {
return ::read(_fd, s, n);
}
std::streambuf::int_type sc::io::fdiobuf::overflow(std::streambuf::int_type c) {
if (c != EOF) { if (c != EOF) {
int res; int res;
if ((res = ::write(_fd, &c, 1)) != 1) { if ((res = ::write(_fd, &c, 1)) != 1) {
@ -27,7 +40,7 @@ std::streambuf::int_type sc::io::fdoutbuf::overflow(std::streambuf::int_type c)
return c; return c;
} }
std::streamsize sc::io::fdoutbuf::xsputn(const char* s, std::streamsize num) { std::streamsize sc::io::fdiobuf::xsputn(const char* s, std::streamsize num) {
int res = ::write(_fd, s, num); int res = ::write(_fd, s, num);
if (res != num) { if (res != num) {
std::cerr << "write result = " << res << ", errno = " << errno << '\n'; std::cerr << "write result = " << res << ", errno = " << errno << '\n';

View File

@ -1,30 +0,0 @@
//
// fdistream.cpp
// libscio
//
// Created by Bob Polis at 2020-02-14
// Copyright (c) 2020 SwiftCoder. All rights reserved.
//
#include "libscio.hpp"
#ifdef _MSC_VER
#include <io.h>
#else
#include <unistd.h>
#endif
using namespace sc::io;
std::streambuf::int_type fdinbuf::underflow() {
int num = read(_fd, &_ch, 1);
if (num <= 0) {
return EOF;
}
setg(&_ch, &_ch, &_ch + 1);
return _ch;
}
std::streamsize fdinbuf::xsgetn(char* s, std::streamsize n) {
return read(_fd, s, n);
}