11 #ifndef __TEXTWOLF_ISTREAM_ITERATOR_HPP__
12 #define __TEXTWOLF_ISTREAM_ITERATOR_HPP__
34 virtual std::size_t
read(
void* buf, std::size_t bufsize)=0;
45 :m_input(&input_),m_errno(0)
47 m_input->unsetf( std::ios::skipws);
48 m_input->exceptions ( std::ifstream::failbit | std::ifstream::badbit | std::ifstream::eofbit );
51 :m_input(o.m_input),m_errno(o.m_errno){}
54 virtual std::size_t
read(
void* buf, std::size_t bufsize)
59 m_input->read( (
char*)buf, bufsize);
60 return m_input->gcount();
62 catch (
const std::istream::failure& err)
67 return m_input->gcount();
88 std::istream* m_input;
110 :m_input(input),m_buf((char*)std::malloc(bufsize)),m_bufsize(bufsize),m_readsize(0),m_readpos(0),m_abspos(0)
112 if (!m_buf)
throw std::bad_alloc();
119 :m_input(o.m_input),m_buf((char*)std::malloc(o.m_bufsize)),m_bufsize(o.m_bufsize),m_readsize(o.m_readsize),m_readpos(o.m_readpos),m_abspos(o.m_abspos)
121 if (!m_buf)
throw std::bad_alloc();
122 std::memcpy( m_buf, o.m_buf, o.m_readsize);
129 return (m_readpos < m_readsize)?m_buf[m_readpos]:0;
135 if (m_readpos+1 >= m_readsize)
148 return (
int)m_readpos - o.m_readpos;
153 return m_abspos + m_readpos;
159 m_abspos += m_readsize;
160 m_readsize = m_input->
read( m_buf, m_bufsize);
169 std::size_t m_bufsize;
170 std::size_t m_readsize;
171 std::size_t m_readpos;
Input stream implementation based on std::istream.
Definition: istreamiterator.hpp:40
~IStreamIterator()
Destructor.
Definition: istreamiterator.hpp:102
PositionIndex position() const
Definition: istreamiterator.hpp:151
Base class for structures that can throw exceptions for non recoverable errors.
Definition: exception.hpp:20
Input stream interface.
Definition: istreamiterator.hpp:30
IStreamIterator & operator++()
Pre increment.
Definition: istreamiterator.hpp:133
StdInputStream(const StdInputStream &o)
Definition: istreamiterator.hpp:50
StdInputStream(std::istream &input_)
Definition: istreamiterator.hpp:44
virtual std::size_t read(void *buf, std::size_t bufsize)=0
virtual int errorcode() const =0
textwolf exception class
Definition: exception.hpp:48
IStreamIterator()
Default constructor.
Definition: istreamiterator.hpp:100
int operator-(const IStreamIterator &o) const
Definition: istreamiterator.hpp:146
virtual ~IStream()
Definition: istreamiterator.hpp:33
virtual ~StdInputStream()
Definition: istreamiterator.hpp:53
error reading a file. System error
Definition: exception.hpp:38
Definition of exceptions with containing error codes thrown by textwolf.
IStreamIterator(const IStreamIterator &o)
Copy constructor.
Definition: istreamiterator.hpp:118
Input iterator on an STL input stream.
Definition: istreamiterator.hpp:95
Definition of position number in source.
virtual int errorcode() const
Definition: istreamiterator.hpp:82
uint64_t PositionIndex
Definition: position.hpp:34
IStreamIterator(IStream *input, std::size_t bufsize=8192)
Constructor.
Definition: istreamiterator.hpp:109
char operator*()
Element access.
Definition: istreamiterator.hpp:127
virtual std::size_t read(void *buf, std::size_t bufsize)
Definition: istreamiterator.hpp:54