mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-22 22:31:18 -05:00
cmUVPipeIStream: Add cmUVPipeIStream
This commit is contained in:
@@ -438,6 +438,7 @@ add_library(
|
||||
cmUVHandlePtr.h
|
||||
cmUVProcessChain.cxx
|
||||
cmUVProcessChain.h
|
||||
cmUVStream.h
|
||||
cmUVStreambuf.h
|
||||
cmUVSignalHackRAII.h
|
||||
cmVariableWatch.cxx
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#pragma once
|
||||
|
||||
#include <istream>
|
||||
|
||||
#include "cmUVHandlePtr.h"
|
||||
#include "cmUVStreambuf.h"
|
||||
|
||||
template <typename CharT, typename Traits = std::char_traits<CharT>>
|
||||
class cmBasicUVIStream : public std::basic_istream<CharT>
|
||||
{
|
||||
public:
|
||||
cmBasicUVIStream();
|
||||
cmBasicUVIStream(uv_stream_t* stream);
|
||||
|
||||
bool is_open() const;
|
||||
|
||||
void open(uv_stream_t* stream);
|
||||
|
||||
void close();
|
||||
|
||||
private:
|
||||
cmBasicUVStreambuf<CharT, Traits> Buffer;
|
||||
};
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
cmBasicUVIStream<CharT, Traits>::cmBasicUVIStream()
|
||||
: std::basic_istream<CharT, Traits>(&this->Buffer)
|
||||
{
|
||||
}
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
cmBasicUVIStream<CharT, Traits>::cmBasicUVIStream(uv_stream_t* stream)
|
||||
: cmBasicUVIStream()
|
||||
{
|
||||
this->open(stream);
|
||||
}
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
bool cmBasicUVIStream<CharT, Traits>::is_open() const
|
||||
{
|
||||
return this->Buffer.is_open();
|
||||
}
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
void cmBasicUVIStream<CharT, Traits>::open(uv_stream_t* stream)
|
||||
{
|
||||
this->Buffer.open(stream);
|
||||
}
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
void cmBasicUVIStream<CharT, Traits>::close()
|
||||
{
|
||||
this->Buffer.close();
|
||||
}
|
||||
|
||||
using cmUVIStream = cmBasicUVIStream<char>;
|
||||
|
||||
template <typename CharT, typename Traits = std::char_traits<CharT>>
|
||||
class cmBasicUVPipeIStream : public cmBasicUVIStream<CharT, Traits>
|
||||
{
|
||||
public:
|
||||
cmBasicUVPipeIStream();
|
||||
cmBasicUVPipeIStream(uv_loop_t& loop, int fd);
|
||||
|
||||
using cmBasicUVIStream<CharT, Traits>::is_open;
|
||||
|
||||
void open(uv_loop_t& loop, int fd);
|
||||
|
||||
void close();
|
||||
|
||||
private:
|
||||
cm::uv_pipe_ptr Pipe;
|
||||
};
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
cmBasicUVPipeIStream<CharT, Traits>::cmBasicUVPipeIStream() = default;
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
cmBasicUVPipeIStream<CharT, Traits>::cmBasicUVPipeIStream(uv_loop_t& loop,
|
||||
int fd)
|
||||
{
|
||||
this->open(loop, fd);
|
||||
}
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
void cmBasicUVPipeIStream<CharT, Traits>::open(uv_loop_t& loop, int fd)
|
||||
{
|
||||
this->Pipe.init(loop, 0);
|
||||
uv_pipe_open(this->Pipe, fd);
|
||||
this->cmBasicUVIStream<CharT, Traits>::open(this->Pipe);
|
||||
}
|
||||
|
||||
template <typename CharT, typename Traits>
|
||||
void cmBasicUVPipeIStream<CharT, Traits>::close()
|
||||
{
|
||||
this->cmBasicUVIStream<CharT, Traits>::close();
|
||||
this->Pipe.reset();
|
||||
}
|
||||
|
||||
using cmUVPipeIStream = cmBasicUVPipeIStream<char>;
|
||||
Reference in New Issue
Block a user