|
CLAW Library (a C++ Library Absolutely Wonderful) 1.5.5
|
Source manager that allow us to read from a std::istream. More...
#include <jpeg.hpp>
Public Member Functions | |
| source_manager (std::istream &is) | |
| Constructor. | |
| ~source_manager () | |
| Destructor. | |
| boolean | fill_input_buffer () |
| Fill the input buffer with new data. | |
| void | skip_input_data (long num_bytes) |
| Skip some bytes in the input buffer. | |
Public Attributes | |
| struct jpeg_source_mgr | pub |
| "public" fields, needed by the jpeg library. | |
Private Attributes | |
| std::istream & | m_input |
| The stream from which we get data. | |
| const JOCTET * | m_buffer |
| Pointer on the begining of the buffer. | |
| const unsigned int | m_buffer_size |
| Number of bytes in the buffer. | |
| unsigned int | m_stream_size |
| The size of the stream. | |
| unsigned int | m_stream_position |
| The current position in the stream. | |
| claw::graphic::jpeg::reader::source_manager::source_manager | ( | std::istream & | is | ) |
Constructor.
| is | The stream we read from. |
Definition at line 97 of file jpeg_reader.cpp.
References m_buffer, m_buffer_size, m_stream_size, and pub.
: m_input(is), m_buffer_size(1024), m_stream_position(0) { std::istream::pos_type pos = is.tellg(); is.seekg( 0 , std::ios_base::end ); m_stream_size = is.tellg() ; is.seekg( pos, std::ios_base::beg ) ; m_buffer = new JOCTET[m_buffer_size]; pub.bytes_in_buffer = 0; } // jpeg::reader::source_manager::source_manager()
| claw::graphic::jpeg::reader::source_manager::~source_manager | ( | ) |
Destructor.
Definition at line 115 of file jpeg_reader.cpp.
{
delete[] m_buffer;
} // jpeg::reader::source_manager::~source_manager()
| boolean claw::graphic::jpeg::reader::source_manager::fill_input_buffer | ( | ) |
Fill the input buffer with new data.
Definition at line 125 of file jpeg_reader.cpp.
{
unsigned int n = std::min( m_buffer_size, m_stream_size - m_stream_position );
m_input.read( (char*)m_buffer, n );
pub.next_input_byte = m_buffer;
pub.bytes_in_buffer = n;
m_stream_position += n;
if (m_input)
return TRUE;
else
return FALSE;
} // jpeg::reader::source_manager::fill_input_buffer()
| void claw::graphic::jpeg::reader::source_manager::skip_input_data | ( | long | num_bytes | ) |
Skip some bytes in the input buffer.
| num_bytes | The number of bytes to skip. |
Definition at line 147 of file jpeg_reader.cpp.
References CLAW_PRECOND.
{
CLAW_PRECOND(num_bytes >=0);
if ( (size_t)num_bytes <= pub.bytes_in_buffer )
{
pub.next_input_byte += num_bytes;
pub.bytes_in_buffer -= num_bytes;
}
else
{
num_bytes -= pub.bytes_in_buffer;
long div = num_bytes / m_buffer_size;
long rest = num_bytes % m_buffer_size;
for (long i=0; i!=(div+1); ++i)
fill_input_buffer();
pub.next_input_byte += rest;
pub.bytes_in_buffer -= rest;
}
} // jpeg::reader::source_manager::skip_input_data()
const JOCTET* claw::graphic::jpeg::reader::source_manager::m_buffer [private] |
Pointer on the begining of the buffer.
Definition at line 106 of file jpeg.hpp.
Referenced by source_manager().
const unsigned int claw::graphic::jpeg::reader::source_manager::m_buffer_size [private] |
Number of bytes in the buffer.
Definition at line 109 of file jpeg.hpp.
Referenced by source_manager().
std::istream& claw::graphic::jpeg::reader::source_manager::m_input [private] |
unsigned int claw::graphic::jpeg::reader::source_manager::m_stream_position [private] |
unsigned int claw::graphic::jpeg::reader::source_manager::m_stream_size [private] |
| struct jpeg_source_mgr claw::graphic::jpeg::reader::source_manager::pub |
"public" fields, needed by the jpeg library.
Definition at line 99 of file jpeg.hpp.
Referenced by claw::graphic::jpeg::reader::create_decompress_info(), and source_manager().
1.7.3