ANTLR_BEGIN_NAMESPACE() template<class ImplTraits> ANTLR_FDSC FileUtils<ImplTraits>::AntlrFopen(const ANTLR_UINT8* filename, const char * mode) { return (ANTLR_FDSC)fopen((const char *)filename, mode); } template<class ImplTraits> void FileUtils<ImplTraits>::AntlrFclose (ANTLR_FDSC fd) { fclose(fd); } template<class ImplTraits> ANTLR_UINT32 FileUtils<ImplTraits>::AntlrFsize(const ANTLR_UINT8* filename) { struct _stat statbuf; _stat((const char *)filename, &statbuf); return (ANTLR_UINT32)statbuf.st_size; } template<class ImplTraits> ANTLR_UINT32 FileUtils<ImplTraits>::AntlrFread(ANTLR_FDSC fdsc, ANTLR_UINT32 count, void* data) { return (ANTLR_UINT32)fread(data, (size_t)count, 1, fdsc); } template<class ImplTraits> template<typename InputStreamType> ANTLR_UINT32 FileUtils<ImplTraits>::AntlrRead8Bit(InputStreamType* input, const ANTLR_UINT8* fileName) { ANTLR_FDSC infile; ANTLR_UINT32 fSize; /* Open the OS file in read binary mode */ infile = FileUtils<ImplTraits>::AntlrFopen(fileName, "rb"); /* Check that it was there */ if (infile == NULL) { ParseFileAbsentException ex; throw ex; } /* It was there, so we can read the bytes now */ fSize = FileUtils<ImplTraits>::AntlrFsize(fileName); /* Size of input file */ /* Allocate buffer for this input set */ void* data = ImplTraits::AllocPolicyType::alloc(fSize); /* Now we read the file. Characters are not converted to * the internal ANTLR encoding until they are read from the buffer */ FileUtils<ImplTraits>::AntlrFread(infile, fSize, data ); input->set_data( (unsigned char*) data ); input->set_sizeBuf( fSize ); input->set_isAllocated(true); /* And close the file handle */ FileUtils<ImplTraits>::AntlrFclose(infile); return ANTLR_SUCCESS; } ANTLR_END_NAMESPACE()