-///
-DocumentIterator bufferBegin(BufferView & bv);
-///
-DocumentIterator bufferEnd();
-///
-DocumentIterator insetBegin(BufferView & bv, InsetBase * inset);
-///
-DocumentIterator insetEnd();
+DocIterator doc_iterator_begin(InsetBase & inset);
+DocIterator doc_iterator_end(InsetBase & inset);
+
+
+// The difference to a ('non stable') DocIterator is the removed
+// (overwritte by 0...) part of the CursorSlice data items. So this thing
+// is suitable for external storage, but not for iteration as such.
+
+class StableDocIterator {
+public:
+ ///
+ StableDocIterator() {}
+ /// non-explicit intended
+ StableDocIterator(const DocIterator & it);
+ ///
+ DocIterator asDocIterator(InsetBase * start) const;
+ ///
+ size_t size() const { return data_.size(); }
+ ///
+ friend std::ostream &
+ operator<<(std::ostream & os, StableDocIterator const & cur);
+ ///
+ friend std::istream &
+ operator>>(std::istream & is, StableDocIterator & cur);
+private:
+ std::vector<CursorSlice> data_;
+};
+
+bool operator==(StableDocIterator const &, StableDocIterator const &);