1*16467b97STreehugger Robot #ifndef _ANTLR3_FILESTREAM_HPP 2*16467b97STreehugger Robot #define _ANTLR3_FILESTREAM_HPP 3*16467b97STreehugger Robot 4*16467b97STreehugger Robot // [The "BSD licence"] 5*16467b97STreehugger Robot // Copyright (c) 2005-2009 Gokulakannan Somasundaram, ElectronDB 6*16467b97STreehugger Robot 7*16467b97STreehugger Robot // 8*16467b97STreehugger Robot // All rights reserved. 9*16467b97STreehugger Robot // 10*16467b97STreehugger Robot // Redistribution and use in source and binary forms, with or without 11*16467b97STreehugger Robot // modification, are permitted provided that the following conditions 12*16467b97STreehugger Robot // are met: 13*16467b97STreehugger Robot // 1. Redistributions of source code must retain the above copyright 14*16467b97STreehugger Robot // notice, this list of conditions and the following disclaimer. 15*16467b97STreehugger Robot // 2. Redistributions in binary form must reproduce the above copyright 16*16467b97STreehugger Robot // notice, this list of conditions and the following disclaimer in the 17*16467b97STreehugger Robot // documentation and/or other materials provided with the distribution. 18*16467b97STreehugger Robot // 3. The name of the author may not be used to endorse or promote products 19*16467b97STreehugger Robot // derived from this software without specific prior written permission. 20*16467b97STreehugger Robot // 21*16467b97STreehugger Robot // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22*16467b97STreehugger Robot // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23*16467b97STreehugger Robot // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24*16467b97STreehugger Robot // IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25*16467b97STreehugger Robot // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26*16467b97STreehugger Robot // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27*16467b97STreehugger Robot // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28*16467b97STreehugger Robot // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29*16467b97STreehugger Robot // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30*16467b97STreehugger Robot // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31*16467b97STreehugger Robot 32*16467b97STreehugger Robot #include <exception> 33*16467b97STreehugger Robot #include <string> 34*16467b97STreehugger Robot 35*16467b97STreehugger Robot #include "antlr3defs.hpp" 36*16467b97STreehugger Robot 37*16467b97STreehugger Robot ANTLR_BEGIN_NAMESPACE() 38*16467b97STreehugger Robot 39*16467b97STreehugger Robot template<class ImplTraits> 40*16467b97STreehugger Robot class FileUtils 41*16467b97STreehugger Robot { 42*16467b97STreehugger Robot public: 43*16467b97STreehugger Robot /** \brief Open an operating system file and return the descriptor 44*16467b97STreehugger Robot * We just use the common open() and related functions here. 45*16467b97STreehugger Robot * Later we might find better ways on systems 46*16467b97STreehugger Robot * such as Windows and OpenVMS for instance. But the idea is to read the 47*16467b97STreehugger Robot * while file at once anyway, so it may be irrelevant. 48*16467b97STreehugger Robot */ 49*16467b97STreehugger Robot static ANTLR_FDSC AntlrFopen(const ANTLR_UINT8* filename, const char * mode); 50*16467b97STreehugger Robot 51*16467b97STreehugger Robot /** \brief Close an operating system file and free any handles 52*16467b97STreehugger Robot * etc. 53*16467b97STreehugger Robot */ 54*16467b97STreehugger Robot static void AntlrFclose (ANTLR_FDSC fd); 55*16467b97STreehugger Robot 56*16467b97STreehugger Robot static ANTLR_UINT32 AntlrFsize(const ANTLR_UINT8* filename); 57*16467b97STreehugger Robot template<typename InputStreamType> 58*16467b97STreehugger Robot static ANTLR_UINT32 AntlrRead8Bit(InputStreamType* input, const ANTLR_UINT8* fileName); 59*16467b97STreehugger Robot static ANTLR_UINT32 AntlrFread(ANTLR_FDSC fdsc, ANTLR_UINT32 count, void* data); 60*16467b97STreehugger Robot 61*16467b97STreehugger Robot }; 62*16467b97STreehugger Robot 63*16467b97STreehugger Robot class ParseFileAbsentException : public std::exception 64*16467b97STreehugger Robot { what() const65*16467b97STreehugger Robot virtual const char* what() const throw() 66*16467b97STreehugger Robot { 67*16467b97STreehugger Robot return " Parse File not Present"; 68*16467b97STreehugger Robot } 69*16467b97STreehugger Robot }; 70*16467b97STreehugger Robot 71*16467b97STreehugger Robot ANTLR_END_NAMESPACE() 72*16467b97STreehugger Robot 73*16467b97STreehugger Robot #include "antlr3filestream.inl" 74*16467b97STreehugger Robot 75*16467b97STreehugger Robot #endif 76