1 /** 2 * Licensed to the University Corporation for Advanced Internet 3 * Development, Inc. (UCAID) under one or more contributor license 4 * agreements. See the NOTICE file distributed with this work for 5 * additional information regarding copyright ownership. 6 * 7 * UCAID licenses this file to you under the Apache License, 8 * Version 2.0 (the "License"); you may not use this file except 9 * in compliance with the License. You may obtain a copy of the 10 * License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 17 * either express or implied. See the License for the specific 18 * language governing permissions and limitations under the License. 19 */ 20 21 /** 22 * @file xmltooling/util/CloneInputStream.h 23 * 24 * InputStream that wraps an InputStream and forks data into a backup file. 25 */ 26 27 #if !defined(__xmltooling_cloneinstr_h__) 28 #define __xmltooling_cloneinstr_h__ 29 30 #include <xercesc/util/BinInputStream.hpp> 31 #include <xmltooling/logging.h> 32 33 #include <string> 34 #include <fstream> 35 36 namespace xmltooling { 37 38 class XMLTOOL_API CloneInputStream : public xercesc::BinInputStream 39 { 40 public : 41 /** 42 * Constructor. 43 * 44 * @param stream a stream that we will read from 45 * @param backingFile the name of a file to write every byte we read, as we read it. 46 * we take ownership of this, arranging to delete it in our destructor. 47 */ 48 CloneInputStream(xercesc::BinInputStream *stream, const std::string& backingFile); 49 50 virtual ~CloneInputStream(); 51 52 virtual XMLSize_t readBytes(XMLByte* const toFill, const XMLSize_t maxToRead); 53 virtual XMLFilePos curPos() const; 54 virtual const XMLCh* getContentType() const; 55 56 57 private : 58 logging::Category& m_log; 59 xercesc::BinInputStream* m_input; 60 std::ofstream m_backingStream; 61 }; 62 }; 63 64 #endif // __xmltooling_curlinstr_h__ 65