75 lines
1.8 KiB
C++
Executable File
75 lines
1.8 KiB
C++
Executable File
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()
|