以下はソースの抜粋。注:このままではコンパイルは通りません。適宜修正してくださいね。
まぁ、結構簡単かも。最初から作っておいてくれればいいのに。。
class StdBinInputStream
: public XERCES_CPP_NAMESPACE::BinInputStream,
private NonCopyable
{
public:
StdBinInputStream(std::istream& inputStream)
: _istream(inputStream) {}
virtual ~StdBinInputStream() {}
virtual unsigned int curPos() const
{ return _istream.tellg(); }
virtual unsigned int readBytes
(XMLByte* const toFill,
const unsigned int maxToRead)
{
XERIAL_ASSERT(sizeof(XMLByte) == sizeof(char));
if(!_istream)
return 0;
_istream.read(reinterpret_cast(toFill), maxToRead);
return _istream.gcount();
}
private:
std::istream& _istream;
};
class IStreamInputSource
: public XERCES_CPP_NAMESPACE::InputSource
{
public:
IStreamInputSource
(std::istream& in,
XERCES_CPP_NAMESPACE::MemoryManager* const manager =
XERCES_CPP_NAMESPACE::XMLPlatformUtils::fgMemoryManager)
: _input(in), XERCES_CPP_NAMESPACE::InputSource(manager)
{}
virtual ~IStreamInputSource(){}
XERCES_CPP_NAMESPACE::BinInputStream* makeStream() const
{
return new StdBinInputStream(_input);
}
private:
std::istream& _input;
};
0 件のコメント:
コメントを投稿