/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2002-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file IStreamInputSource.h14/// @author Michael Behrisch15/// @author Gilles Filippini16/// @date Sept 200217///18// Xerces InputSource reading from arbitrary std::istream19// reimplementation inspired by https://marc.info/?l=xerces-dev&m=8695213351162320/****************************************************************************/21#pragma once22#include <config.h>23#include <iostream>24#include <xercesc/util/BinInputStream.hpp>25#include <xercesc/sax/InputSource.hpp>262728// ===========================================================================29// class definitions30// ===========================================================================31/**32* @class IStreamBinInputStream33* @brief Xerces BinInputStream reading from arbitrary std::istream34*/35class IStreamBinInputStream : public XERCES_CPP_NAMESPACE::BinInputStream {36public:37IStreamBinInputStream(std::istream& in) : myIn(in) { }38virtual ~IStreamBinInputStream(void) { }39virtual XMLFilePos curPos(void) const {40return myIn.tellg();41}42virtual XMLSize_t readBytes(XMLByte* const buf, const XMLSize_t max) {43myIn.read((char*)buf, max);44return (XMLSize_t)myIn.gcount();45}46virtual const XMLCh* getContentType() const {47return nullptr;48}49private:50std::istream& myIn;51};525354/**55* @class IStreamInputSource56* @brief Xerces InputSource reading from arbitrary std::istream57*/58class IStreamInputSource : public XERCES_CPP_NAMESPACE::InputSource {59public:60IStreamInputSource(std::istream& in) :61XERCES_CPP_NAMESPACE::InputSource("istream"), myIn(in) { }62virtual ~IStreamInputSource(void) { }63virtual XERCES_CPP_NAMESPACE::BinInputStream* makeStream(void) const {64return new IStreamBinInputStream(myIn);65}66private:67std::istream& myIn;68};697071