Eclipse SUMO - Simulation of Urban MObility
IStreamInputSource.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2002-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // Xerces InputSource reading from arbitrary std::istream
16 // reimplementation inspired by https://marc.info/?l=xerces-dev&m=86952133511623
17 /****************************************************************************/
18 #ifndef IStreamInputSource_h
19 #define IStreamInputSource_h
20 
21 
22 // ===========================================================================
23 // included modules
24 // ===========================================================================
25 #include <iostream>
26 #include <xercesc/util/BinInputStream.hpp>
27 #include <xercesc/sax/InputSource.hpp>
28 
29 
30 // ===========================================================================
31 // class definitions
32 // ===========================================================================
37 class IStreamBinInputStream : public XERCES_CPP_NAMESPACE::BinInputStream {
38 public:
39  IStreamBinInputStream(std::istream& in) : myIn(in) { }
40  virtual ~IStreamBinInputStream(void) { }
41  virtual XMLFilePos curPos(void) const {
42  return myIn.tellg();
43  }
44  virtual XMLSize_t readBytes(XMLByte* const buf, const XMLSize_t max) {
45  myIn.read((char*)buf, max);
46  return (XMLSize_t)myIn.gcount();
47  }
48  virtual const XMLCh* getContentType() const {
49  return nullptr;
50  }
51 private:
52  std::istream& myIn;
53 };
54 
55 
60 class IStreamInputSource : public XERCES_CPP_NAMESPACE::InputSource {
61 public:
62  IStreamInputSource(std::istream& in) :
63  XERCES_CPP_NAMESPACE::InputSource("istream"), myIn(in) { }
64  virtual ~IStreamInputSource(void) { }
65  virtual XERCES_CPP_NAMESPACE::BinInputStream* makeStream(void) const {
66  return new IStreamBinInputStream(myIn);
67  }
68 private:
69  std::istream& myIn;
70 };
71 
72 
73 #endif
74 
75 
76 /****************************************************************************/
IStreamInputSource::IStreamInputSource
IStreamInputSource(std::istream &in)
Definition: IStreamInputSource.h:62
IStreamBinInputStream
Xerces BinInputStream reading from arbitrary std::istream.
Definition: IStreamInputSource.h:37
IStreamBinInputStream::readBytes
virtual XMLSize_t readBytes(XMLByte *const buf, const XMLSize_t max)
Definition: IStreamInputSource.h:44
IStreamBinInputStream::myIn
std::istream & myIn
Definition: IStreamInputSource.h:52
IStreamInputSource
Xerces InputSource reading from arbitrary std::istream.
Definition: IStreamInputSource.h:60
IStreamInputSource::~IStreamInputSource
virtual ~IStreamInputSource(void)
Definition: IStreamInputSource.h:64
IStreamBinInputStream::curPos
virtual XMLFilePos curPos(void) const
Definition: IStreamInputSource.h:41
IStreamBinInputStream::~IStreamBinInputStream
virtual ~IStreamBinInputStream(void)
Definition: IStreamInputSource.h:40
IStreamInputSource::myIn
std::istream & myIn
Definition: IStreamInputSource.h:69
IStreamInputSource::makeStream
virtual XERCES_CPP_NAMESPACE::BinInputStream * makeStream(void) const
Definition: IStreamInputSource.h:65
IStreamBinInputStream::getContentType
virtual const XMLCh * getContentType() const
Definition: IStreamInputSource.h:48
IStreamBinInputStream::IStreamBinInputStream
IStreamBinInputStream(std::istream &in)
Definition: IStreamInputSource.h:39