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
|