ClickHouse/dbms/include/DB/Common/UnescapingInputStream.h

50 lines
829 B
C
Raw Normal View History

2010-03-01 16:59:51 +00:00
#ifndef DBMS_COMMON_UNESCAPING_INPUT_STREAM_H
#define DBMS_COMMON_UNESCAPING_INPUT_STREAM_H
#include <istream>
#include <Poco/UnbufferedStreamBuf.h>
namespace DB
{
/** Поток, который unescape-ит всё, что из него читают.
*/
class UnescapingStreamBuf : public Poco::UnbufferedStreamBuf
{
public:
2010-03-03 19:48:02 +00:00
UnescapingStreamBuf(std::istream & istr, char delimiter_);
2010-03-01 16:59:51 +00:00
protected:
2010-03-01 18:03:12 +00:00
int readFromDevice();
2010-03-01 16:59:51 +00:00
private:
std::istream * p_istr;
2010-03-03 19:48:02 +00:00
char delimiter;
2010-03-01 16:59:51 +00:00
};
class UnescapingIOS : public virtual std::ios
{
public:
2010-03-03 19:48:02 +00:00
UnescapingIOS(std::istream & istr, char delimiter_);
2010-03-01 16:59:51 +00:00
UnescapingStreamBuf * rdbuf();
protected:
UnescapingStreamBuf buf;
};
class UnescapingInputStream : public UnescapingIOS, public std::istream
{
public:
2010-03-03 19:48:02 +00:00
UnescapingInputStream(std::istream & istr, char delimiter_);
2010-03-01 16:59:51 +00:00
};
}
#endif