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(); }
Example #5
0
_Locale_impl::Init::~Init() {
  if (_M_count()._M_decr() == 0) {
    _Locale_impl::_S_uninitialize();
  }
}
Example #6
0
_Locale_impl::Init::Init() {
  if (_M_count()._M_incr() == 1) {
    _Locale_impl::_S_initialize();
  }
}