89 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //
 | |
| // fdstream.cpp
 | |
| // libscio
 | |
| //
 | |
| // Created by Bob Polis at 2020-04-25
 | |
| // Copyright (c) 2020 SwiftCoder. All rights reserved.
 | |
| //
 | |
| 
 | |
| #include "libscio.hpp"
 | |
| #include <unistd.h>
 | |
| 
 | |
| // fdostream --------------------------------------------------------------
 | |
| 
 | |
| sc::io::fdostream::~fdostream() {
 | |
| 	close();
 | |
| }
 | |
| 
 | |
| void sc::io::fdostream::close() {
 | |
| 	if (_outbuf.fd() != -1) {
 | |
| 		::close(_outbuf.fd());
 | |
| 		_outbuf.fd(-1);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| sc::io::fdostream::fdostream(sc::io::fdostream&& other) : std::ostream(&_outbuf) {
 | |
| 	_outbuf.fd(other._outbuf.fd());
 | |
| 	other._outbuf.fd(-1);
 | |
| }
 | |
| 
 | |
| sc::io::fdostream& sc::io::fdostream::operator=(sc::io::fdostream&& other) {
 | |
| 	if (this != &other) {
 | |
| 		_outbuf.fd(other._outbuf.fd());
 | |
| 		other._outbuf.fd(-1);
 | |
| 	}
 | |
| 	return *this;
 | |
| }
 | |
| 
 | |
| // fdistream --------------------------------------------------------------
 | |
| 
 | |
| sc::io::fdistream::~fdistream() {
 | |
| 	close();
 | |
| }
 | |
| 
 | |
| void sc::io::fdistream::close() {
 | |
| 	if (_inbuf.fd() != -1) {
 | |
| 		::close(_inbuf.fd());
 | |
| 		_inbuf.fd(-1);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| sc::io::fdistream::fdistream(sc::io::fdistream&& other) : std::istream(&_inbuf) {
 | |
| 	_inbuf.fd(other._inbuf.fd());
 | |
| 	other._inbuf.fd(-1);
 | |
| }
 | |
| 
 | |
| sc::io::fdistream& sc::io::fdistream::operator=(sc::io::fdistream&& other) {
 | |
| 	if (this != &other) {
 | |
| 		_inbuf.fd(other._inbuf.fd());
 | |
| 		other._inbuf.fd(-1);
 | |
| 	}
 | |
| 	return *this;
 | |
| }
 | |
| 
 | |
| // fdstream ---------------------------------------------------------------
 | |
| 
 | |
| sc::io::fdstream::~fdstream() {
 | |
| 	close();
 | |
| }
 | |
| 
 | |
| void sc::io::fdstream::close() {
 | |
| 	if (_iobuf.fd() != -1) {
 | |
| 		::close(_iobuf.fd());
 | |
| 		_iobuf.fd(-1);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| sc::io::fdstream::fdstream(sc::io::fdstream&& other) : std::iostream(&_iobuf) {
 | |
| 	_iobuf.fd(other._iobuf.fd());
 | |
| 	other._iobuf.fd(-1);
 | |
| }
 | |
| 
 | |
| sc::io::fdstream& sc::io::fdstream::operator=(sc::io::fdstream&& other) {
 | |
| 	if (this != &other) {
 | |
| 		_iobuf.fd(other._iobuf.fd());
 | |
| 		other._iobuf.fd(-1);
 | |
| 	}
 | |
| 	return *this;
 | |
| }
 |