iterator_iterator next(difference_type n) const { const pair_iterator * p = &_M_current(); const pair_iterator * last = &this->base_reference()[_M_count()]; difference_type d = p->second - p->first; while (d > n && ++p != last) { n -= d; d = p->second - p->first; } iterator_iterator ret(p, last); if (p != last) ret._M_first() += n; return ret; }
void advance(difference_type n) { difference_type d = _M_second() - _M_first(); for (;;){ if (d > n){ if (_pos+1 < _M_count()){ ++_pos; n -= d; d = _M_second() - _M_first(); continue; } break; } _M_first() += n; break; } }
void increment() { ++_M_first(); while (_M_first() == _M_second() && _pos+1 < _M_count()) ++_pos; }
bool valid() const { return _pos < _M_count() && _M_first() != _M_second(); }
_Locale_impl::Init::~Init() { if (_M_count()._M_decr() == 0) { _Locale_impl::_S_uninitialize(); } }
_Locale_impl::Init::Init() { if (_M_count()._M_incr() == 1) { _Locale_impl::_S_initialize(); } }