#include <FileCharStream.h>
Public Member Functions | |
ACEXML_FileCharStream (void) | |
Default constructor. | |
virtual | ~ACEXML_FileCharStream (void) |
Destructor. | |
int | open (const ACEXML_Char *name) |
Open a file. | |
virtual int | available (void) |
virtual int | close (void) |
virtual int | get (ACEXML_Char &ch) |
virtual int | read (ACEXML_Char *str, size_t len) |
virtual int | determine_encoding (void) |
virtual int | peek (void) |
virtual void | rewind (void) |
virtual const ACEXML_Char * | getEncoding (void) |
virtual const ACEXML_Char * | getSystemId (void) |
Private Member Functions | |
int | getchar_i (char &ch) |
Private Attributes | |
ACEXML_Char * | filename_ |
ACEXML_Char * | encoding_ |
ACE_OFF_T | size_ |
FILE * | infile_ |
ACEXML_Char | peek_ |
An implementation of ACEXML_CharStream for reading input from a file.
Definition at line 31 of file FileCharStream.h.
ACEXML_FileCharStream::ACEXML_FileCharStream | ( | void | ) |
ACEXML_FileCharStream::~ACEXML_FileCharStream | ( | void | ) | [virtual] |
int ACEXML_FileCharStream::available | ( | void | ) | [virtual] |
Returns the available ACEXML_Char in the buffer. -1 if the object is not initialized properly.
Implements ACEXML_CharStream.
Definition at line 101 of file FileCharStream.cpp.
{ if (this->infile_ == 0) return -1; long curr; if ((curr = ACE_OS::ftell (this->infile_)) < 0) return -1; return static_cast<int> (this->size_ - curr); }
int ACEXML_FileCharStream::close | ( | void | ) | [virtual] |
Close this stream and release all resources used by it.
Implements ACEXML_CharStream.
Definition at line 113 of file FileCharStream.cpp.
int ACEXML_FileCharStream::determine_encoding | ( | void | ) | [virtual] |
Determine the encoding of the file.
Definition at line 47 of file FileCharStream.cpp.
{ if (this->infile_ == 0) return -1; char input[4]; int retval = 0; int i = 0; for (; i < 4 && retval != -1; ++i) retval = this->getchar_i(input[i]); if (i < 4) return -1; // Rewind the stream ACE_OS::rewind (this->infile_); const ACEXML_Char* temp = ACEXML_Encoding::get_encoding (input); if (!temp) return -1; else { delete [] this->encoding_; this->encoding_ = ACE::strnew (temp); // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("File's encoding is %s\n"), // this->encoding_)); } // Move over the byte-order-mark if present. char ch; for (int j = 0; j < 3; ++j) { if (this->getchar_i (ch) < 0) return -1; if (ch == '\xFF' || ch == '\xFE' || ch == '\xEF' || ch == '\xBB' || ch == '\xBF') continue; else { ACE_OS::ungetc (ch, this->infile_); break; } } return 0; }
int ACEXML_FileCharStream::get | ( | ACEXML_Char & | ch | ) | [virtual] |
Read the next ACEXML_Char. Return -1 if we are not able to return an ACEXML_Char, 0 if succees.
Implements ACEXML_CharStream.
Definition at line 148 of file FileCharStream.cpp.
{ if (this->infile_ == 0) return -1; #if defined (ACE_USES_WCHAR) return this->get_i (ch); #else ch = (ACEXML_Char) ACE_OS::fgetc (this->infile_); return (feof(this->infile_) ? -1 : 0); #endif /* ACE_USES_WCHAR */ }
int ACEXML_FileCharStream::getchar_i | ( | char & | ch | ) | [private] |
Read the next character as a normal character. Return -1 if EOF is reached, else return 0.
Definition at line 131 of file FileCharStream.cpp.
{ ch = static_cast<char> (ACE_OS::fgetc (this->infile_)); return (feof(this->infile_) ? -1 : 0); }
const ACEXML_Char * ACEXML_FileCharStream::getEncoding | ( | void | ) | [virtual] |
Implements ACEXML_CharStream.
Definition at line 246 of file FileCharStream.cpp.
{ return this->encoding_; }
const ACEXML_Char * ACEXML_FileCharStream::getSystemId | ( | void | ) | [virtual] |
Implements ACEXML_CharStream.
Definition at line 252 of file FileCharStream.cpp.
{ return this->filename_; }
int ACEXML_FileCharStream::open | ( | const ACEXML_Char * | name | ) |
Open a file.
Definition at line 25 of file FileCharStream.cpp.
{ delete[] this->filename_; this->filename_ = 0; delete[] this->encoding_; this->encoding_ = 0; this->infile_ = ACE_OS::fopen (name, ACE_TEXT ("r")); if (this->infile_ == 0) return -1; ACE_stat statbuf; if (ACE_OS::stat (name, &statbuf) < 0) return -1; this->size_ = ACE_Utils::truncate_cast<ACE_OFF_T> (statbuf.st_size); this->filename_ = ACE::strnew (name); return this->determine_encoding(); }
int ACEXML_FileCharStream::peek | ( | void | ) | [virtual] |
Peek the next ACEXML_Char in the CharStream. Return the character if success, -1 if EOF is reached.
Implements ACEXML_CharStream.
Definition at line 161 of file FileCharStream.cpp.
{ if (this->infile_ == 0) return -1; #if defined (ACE_USES_WCHAR) return this->peek_i(); #else ACEXML_Char ch = static_cast<ACEXML_Char> (ACE_OS::fgetc (this->infile_)); ACE_OS::ungetc (ch, this->infile_); return ch; #endif /* ACE_USES_WCHAR */ }
int ACEXML_FileCharStream::read | ( | ACEXML_Char * | str, | |
size_t | len | |||
) | [virtual] |
Read the next batch of ACEXML_Char strings
Implements ACEXML_CharStream.
Definition at line 138 of file FileCharStream.cpp.
{ if (this->infile_ == 0) return -1; return static_cast<int> (ACE_OS::fread (str, sizeof (ACEXML_Char), len, this->infile_)); }
void ACEXML_FileCharStream::rewind | ( | void | ) | [virtual] |
Resets the file pointer to the beginning of the stream.
Implements ACEXML_CharStream.
Definition at line 92 of file FileCharStream.cpp.
{ if (this->infile_ == 0) return; ACE_OS::rewind (this->infile_); this->determine_encoding(); }
ACEXML_Char* ACEXML_FileCharStream::encoding_ [private] |
Definition at line 117 of file FileCharStream.h.
ACEXML_Char* ACEXML_FileCharStream::filename_ [private] |
Definition at line 116 of file FileCharStream.h.
FILE* ACEXML_FileCharStream::infile_ [private] |
Definition at line 119 of file FileCharStream.h.
ACEXML_Char ACEXML_FileCharStream::peek_ [private] |
Definition at line 124 of file FileCharStream.h.
ACE_OFF_T ACEXML_FileCharStream::size_ [private] |
Definition at line 118 of file FileCharStream.h.