iterator.hh modification
/* iterator.hh
* This file is part of cdbxx library
* Copyright (c) 2004 by Stanislav Ievlev
*
* This file is covered by the GNU Library General Public License,
* which should be included with libcdbxx as the file COPYING.
*/
#ifndef CDB_XX_ITERATOR_HH__
#define CDB_XX_ITERATOR_HH__
#include <iterator>
extern "C"
{
#include <cdb.h>
}
#include <cdbxx/data.hh>
namespace cdbxx
{
/**
* forward walking database iterator
*/
class iterator: public std::iterator<std::forward_iterator_tag, data_pair>
{
static const size_t cdbi_size = sizeof(cdbi_t);
public:
iterator(mem_pos pos = 0,bool fill = true); /**< start iterator with appropriate offset in the database file*/
iterator& operator++(); /**< prefix operator */
iterator operator++(int);
iterator& operator--(); /**< prefix operator */
iterator operator--(int);
iterator& operator+=(int j);
iterator& operator-=(int j);
bool equal(const iterator& other) const;
const data_pair& operator*() const;
const data_pair* operator->() const;
private:
void fill_pair(); /**< fill internal storage with current data */
mem_pos pos_; /**< current position in the file before database record */
cdbi_t keylen_; /**< length of the current key */
cdbi_t valuelen_; /**< length of the current value */
data_pair pair_;/**< temporary internal storage of current data pair */
};
inline bool operator==(const iterator& lhs, const iterator& rhs)
{
return lhs.equal(rhs);
}
inline bool operator!=(const iterator& lhs, const iterator& rhs)
{
return !(lhs.equal(rhs));
}
}
#endif