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 /****************************************************************************/
16 // Xerces InputSource reading from arbitrary std::istream
17 // reimplementation inspired by https://marc.info/?l=xerces-dev&m=86952133511623
18 /****************************************************************************/
19 #ifndef IStreamInputSource_h
20 #define IStreamInputSource_h
21 
22 
23 // ===========================================================================
24 // included modules
25 // ===========================================================================
26 #include <iostream>
27 #include <xercesc/util/BinInputStream.hpp>
28 #include <xercesc/sax/InputSource.hpp>
29 
30 
31 // ===========================================================================
32 // class definitions
33 // ===========================================================================
38 class IStreamBinInputStream : public XERCES_CPP_NAMESPACE::BinInputStream {
39 public:
40  IStreamBinInputStream(std::istream& in) : myIn(in) { }
41  virtual ~IStreamBinInputStream(void) { }
42  virtual XMLFilePos curPos(void) const {
43  return myIn.tellg();
44  }
45  virtual XMLSize_t readBytes(XMLByte* const buf, const XMLSize_t max) {
46  myIn.read((char*)buf, max);
47  return (XMLSize_t)myIn.gcount();
48  }
49  virtual const XMLCh* getContentType() const {
50  return nullptr;
51  }
52 private:
53  std::istream& myIn;
54 };
55 
56 
61 class IStreamInputSource : public XERCES_CPP_NAMESPACE::InputSource {
62 public:
63  IStreamInputSource(std::istream& in) :
64  XERCES_CPP_NAMESPACE::InputSource("istream"), myIn(in) { }
65  virtual ~IStreamInputSource(void) { }
66  virtual XERCES_CPP_NAMESPACE::BinInputStream* makeStream(void) const {
67  return new IStreamBinInputStream(myIn);
68  }
69 private:
70  std::istream& myIn;
71 };
72 
73 
74 #endif
75 
76 
77 /****************************************************************************/
IStreamInputSource::IStreamInputSource
IStreamInputSource(std::istream &in)
Definition: IStreamInputSource.h:63
IStreamBinInputStream
Xerces BinInputStream reading from arbitrary std::istream.
Definition: IStreamInputSource.h:38
IStreamBinInputStream::readBytes
virtual XMLSize_t readBytes(XMLByte *const buf, const XMLSize_t max)
Definition: IStreamInputSource.h:45
IStreamBinInputStream::myIn
std::istream & myIn
Definition: IStreamInputSource.h:53
IStreamInputSource
Xerces InputSource reading from arbitrary std::istream.
Definition: IStreamInputSource.h:61
IStreamInputSource::~IStreamInputSource
virtual ~IStreamInputSource(void)
Definition: IStreamInputSource.h:65
IStreamBinInputStream::curPos
virtual XMLFilePos curPos(void) const
Definition: IStreamInputSource.h:42
IStreamBinInputStream::~IStreamBinInputStream
virtual ~IStreamBinInputStream(void)
Definition: IStreamInputSource.h:41
IStreamInputSource::myIn
std::istream & myIn
Definition: IStreamInputSource.h:70
IStreamInputSource::makeStream
virtual XERCES_CPP_NAMESPACE::BinInputStream * makeStream(void) const
Definition: IStreamInputSource.h:66
IStreamBinInputStream::getContentType
virtual const XMLCh * getContentType() const
Definition: IStreamInputSource.h:49
IStreamBinInputStream::IStreamBinInputStream
IStreamBinInputStream(std::istream &in)
Definition: IStreamInputSource.h:40