return *this;
}*/
+ template<bool is_const>
+ buffer::list::iterator_impl<is_const>::iterator_impl(bl_t *l, unsigned o)
+ : bl(l), ls(&bl->_buffers), off(0), p(ls->begin()), p_off(0)
+ {
+ advance(o);
+ }
+
template<bool is_const>
void buffer::list::iterator_impl<is_const>::advance(int o)
{
template class buffer::list::iterator_impl<true>;
template class buffer::list::iterator_impl<false>;
+ buffer::list::iterator::iterator(bl_t *l, unsigned o)
+ : iterator_impl(l, o)
+ {}
+
+ buffer::list::iterator::iterator(bl_t *l, unsigned o, list_iter_t ip, unsigned po)
+ : iterator_impl(l, o, ip, po)
+ {}
+
void buffer::list::iterator::advance(int o)
{
buffer::list::iterator_impl<false>::advance(o);
#if __GNUC__ >= 4
#define CEPH_BUFFER_API __attribute__ ((visibility ("default")))
+ #define CEPH_BUFFER_DETAILS __attribute__ ((visibility ("hidden")))
#else
#define CEPH_BUFFER_API
+ #define CEPH_BUFFER_DETAILS
#endif
#if defined(HAVE_XIO)
ptr append_buffer; // where i put small appends.
template <bool is_const>
- class iterator_impl: public std::iterator<std::forward_iterator_tag, char> {
+ class CEPH_BUFFER_DETAILS iterator_impl
+ : public std::iterator<std::forward_iterator_tag, char> {
protected:
typedef typename std::conditional<is_const,
const list,
// constructor. position.
iterator_impl()
: bl(0), ls(0), off(0), p_off(0) {}
- iterator_impl(bl_t *l, unsigned o=0)
- : bl(l), ls(&bl->_buffers), off(0), p(ls->begin()), p_off(0) {
- advance(o);
- }
+ iterator_impl(bl_t *l, unsigned o=0);
iterator_impl(bl_t *l, unsigned o, list_iter_t ip, unsigned po)
: bl(l), ls(&bl->_buffers), off(o), p(ip), p_off(po) {}
class CEPH_BUFFER_API iterator : public iterator_impl<false> {
public:
- iterator(): iterator_impl() {}
- iterator(bl_t *l, unsigned o=0) :
- iterator_impl(l, o) {}
- iterator(bl_t *l, unsigned o, list_iter_t ip, unsigned po) :
- iterator_impl(l, o, ip, po) {}
+ iterator() = default;
+ iterator(bl_t *l, unsigned o=0);
+ iterator(bl_t *l, unsigned o, list_iter_t ip, unsigned po);
void advance(int o);
void seek(unsigned o);