+/////////////////////////////////////////////////////////////////////
+//
+// SpellResultRange
+//
+/////////////////////////////////////////////////////////////////////
+
+class SpellResultRange {
+public:
+ SpellResultRange(FontSpan range, SpellChecker::Result result)
+ : range_(range), result_(result)
+ {}
+ ///
+ FontSpan const & range() const { return range_; }
+ ///
+ void range(FontSpan const & r) { range_ = r; }
+ ///
+ SpellChecker::Result result() const { return result_; }
+ ///
+ void result(SpellChecker::Result r) { result_ = r; }
+ ///
+ bool inside(pos_type pos) const { return range_.inside(pos); }
+ ///
+ bool covered(FontSpan const & r) const
+ {
+ // 1. first of new range inside current range or
+ // 2. last of new range inside current range or
+ // 3. first of current range inside new range or
+ // 4. last of current range inside new range
+ return range_.inside(r.first) || range_.inside(r.last) ||
+ r.inside(range_.first) || r.inside(range_.last);
+ }
+ ///
+ void shift(pos_type pos, int offset)
+ {
+ if (range_.first > pos) {
+ range_.first += offset;
+ range_.last += offset;
+ } else if (range_.last > pos) {
+ range_.last += offset;
+ }
+ }
+private:
+ FontSpan range_ ;
+ SpellChecker::Result result_ ;
+};
+
+