#include <ACEXML/common/FileCharStream.h>
Inheritance diagram for ACEXML_FileCharStream:
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_ |
off_t | size_ |
FILE * | infile_ |
ACEXML_Char | peek_ |
Definition at line 31 of file FileCharStream.h.
|
Default constructor.
Definition at line 13 of file FileCharStream.cpp.
|
|
Destructor.
Definition at line 18 of file FileCharStream.cpp. References close().
00019 { 00020 this->close(); 00021 } |
|
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. References ACE_OS::ftell(), and infile_.
00102 { 00103 if (this->infile_ == 0) 00104 return -1; 00105 00106 long curr; 00107 if ((curr = ACE_OS::ftell (this->infile_)) < 0) 00108 return -1; 00109 return (this->size_ - curr); 00110 } |
|
Close this stream and release all resources used by it. Implements ACEXML_CharStream. Definition at line 113 of file FileCharStream.cpp. References encoding_, ACE_OS::fclose(), infile_, and peek_. Referenced by ~ACEXML_FileCharStream().
00114 { 00115 if (this->infile_ != 0) 00116 { 00117 ACE_OS::fclose (this->infile_); 00118 this->infile_ = 0; 00119 } 00120 delete[] this->filename_; 00121 this->filename_ = 0; 00122 delete[] this->encoding_; 00123 this->encoding_ = 0; 00124 this->size_ = 0; 00125 this->peek_ = 0; 00126 return 0; 00127 } |
|
Determine the encoding of the file. Definition at line 46 of file FileCharStream.cpp. References ACEXML_Char, encoding_, ACEXML_Encoding::get_encoding(), getchar_i(), infile_, ACE_OS::rewind(), and ACE::strnew(). Referenced by open(), and rewind().
00047 { 00048 if (this->infile_ == 0) 00049 return -1; 00050 00051 char input[4]; 00052 int retval = 0; 00053 int i = 0; 00054 for (; i < 4 && retval != -1; ++i) 00055 retval = this->getchar_i(input[i]); 00056 if (i < 4) 00057 return -1; 00058 00059 // Rewind the stream 00060 ACE_OS::rewind (this->infile_); 00061 00062 const ACEXML_Char* temp = ACEXML_Encoding::get_encoding (input); 00063 if (!temp) 00064 return -1; 00065 else 00066 { 00067 if (this->encoding_) 00068 delete [] this->encoding_; 00069 this->encoding_ = ACE::strnew (temp); 00070 // ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("File's encoding is %s\n"), 00071 // this->encoding_)); 00072 } 00073 // Move over the byte-order-mark if present. 00074 char ch; 00075 for (int j = 0; j < 3; ++j) 00076 { 00077 if (this->getchar_i (ch) < 0) 00078 return -1; 00079 if (ch == '\xFF' || ch == '\xFE' || ch == '\xEF' || ch == '\xBB' || 00080 ch == '\xBF') 00081 continue; 00082 else 00083 { 00084 ungetc (ch, this->infile_); 00085 break; 00086 } 00087 } 00088 return 0; 00089 } |
|
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. References ACEXML_Char, ACE_OS::fgetc(), and infile_.
00149 { 00150 if (this->infile_ == 0) 00151 return -1; 00152 #if defined (ACE_USES_WCHAR) 00153 return this->get_i (ch); 00154 #else 00155 ch = (ACEXML_Char) ACE_OS::fgetc (this->infile_); 00156 return (feof(this->infile_) ? -1 : 0); 00157 #endif /* ACE_USES_WCHAR */ 00158 } |
|
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. References ACE_OS::fgetc(). Referenced by determine_encoding().
00132 { 00133 ch = static_cast<char> (ACE_OS::fgetc (this->infile_)); 00134 return (feof(this->infile_) ? -1 : 0); 00135 } |
|
Implements ACEXML_CharStream. Definition at line 246 of file FileCharStream.cpp. References encoding_.
00247 { 00248 return this->encoding_; 00249 } |
|
Implements ACEXML_CharStream. Definition at line 252 of file FileCharStream.cpp.
00253 { 00254 return this->filename_; 00255 } |
|
Open a file.
Definition at line 24 of file FileCharStream.cpp. References ACE_stat, ACE_TEXT, ACEXML_Char, determine_encoding(), encoding_, ACE_OS::fopen(), infile_, ACE_OS::stat(), and ACE::strnew(). Referenced by ACEXML_StreamFactory::create_stream().
00025 { 00026 delete[] this->filename_; 00027 this->filename_ = 0; 00028 00029 delete[] this->encoding_; 00030 this->encoding_ = 0; 00031 00032 this->infile_ = ACE_OS::fopen (name, ACE_TEXT ("r")); 00033 if (this->infile_ == 0) 00034 return -1; 00035 00036 ACE_stat statbuf; 00037 if (ACE_OS::stat (name, &statbuf) < 0) 00038 return -1; 00039 00040 this->size_ = statbuf.st_size; 00041 this->filename_ = ACE::strnew (name); 00042 return this->determine_encoding(); 00043 } |
|
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. References ACEXML_Char, ACE_OS::fgetc(), and infile_.
00162 { 00163 if (this->infile_ == 0) 00164 return -1; 00165 #if defined (ACE_USES_WCHAR) 00166 return this->peek_i(); 00167 #else 00168 00169 ACEXML_Char ch = static_cast<ACEXML_Char> (ACE_OS::fgetc (this->infile_)); 00170 ::ungetc (ch, this->infile_); 00171 return ch; 00172 #endif /* ACE_USES_WCHAR */ 00173 } |
|
Read the next batch of ACEXML_Char strings Implements ACEXML_CharStream. Definition at line 138 of file FileCharStream.cpp. References ACEXML_Char, ACE_OS::fread(), and infile_.
00140 { 00141 if (this->infile_ == 0) 00142 return -1; 00143 00144 return static_cast<int> (ACE_OS::fread (str, sizeof (ACEXML_Char), len, this->infile_)); 00145 } |
|
Resets the file pointer to the beginning of the stream. Implements ACEXML_CharStream. Definition at line 92 of file FileCharStream.cpp. References determine_encoding(), infile_, and ACE_OS::rewind().
00093 { 00094 if (this->infile_ == 0) 00095 return; 00096 ACE_OS::rewind (this->infile_); 00097 this->determine_encoding(); 00098 } |
|
Definition at line 117 of file FileCharStream.h. Referenced by close(), determine_encoding(), getEncoding(), and open(). |
|
Definition at line 116 of file FileCharStream.h. |
|
Definition at line 119 of file FileCharStream.h. Referenced by available(), close(), determine_encoding(), get(), open(), peek(), read(), and rewind(). |
|
Definition at line 124 of file FileCharStream.h. Referenced by close(). |
|
Definition at line 118 of file FileCharStream.h. |