iterator_type begin() const { return iterator_type(m_cst, m_cst->select_child(m_parent, 1)); }
iterator_type end() const { return iterator_type(m_cst, m_cst->root()); }
data_type() : out_buffer(new std::deque<char>) , stream(iterator_type(*(out_buffer.data_))) {}
iterator_type operator+(ptrdiff_t d) const { return iterator_type(vec, pos + d); }
const_reverse_iterator(Datum* _Ptr):my_base_type(iterator_type(_Ptr)){return;}
const_reverse_iterator():my_base_type(iterator_type()){return;}
iterator(Datum* _Ptr):my_base_type(iterator_type(_Ptr)){return;}
iterator():my_base_type(iterator_type()){return;}
// end has a default value, for facilitating the 'default iterator is passed-end iterator' idiom irange( iterator_type begin, iterator_type end = iterator_type()) : base( begin,end ) {}