+
+ const PoolImpl::TrackedLocaleIds & PoolImpl::trackedLocaleIds() const
+ {
+ if ( ! _trackedLocaleIdsPtr )
+ {
+ _trackedLocaleIdsPtr.reset( new TrackedLocaleIds );
+
+ const base::SetTracker<LocaleSet> & localesTracker( _requestedLocalesTracker );
+ TrackedLocaleIds & localeIds( *_trackedLocaleIdsPtr );
+
+ // Add current locales+fallback except for added ones
+ for ( Locale lang: localesTracker.current() )
+ {
+ if ( localesTracker.wasAdded( lang ) )
+ continue;
+ for ( ; lang; lang = lang.fallback() )
+ { localeIds.current().insert( IdString(lang) ); }
+ }
+
+ // Add added locales+fallback except they are already in current
+ for ( Locale lang: localesTracker.added() )
+ {
+ for ( ; lang && localeIds.current().insert( IdString(lang) ).second; lang = lang.fallback() )
+ { localeIds.added().insert( IdString(lang) ); }
+ }
+
+ // Add removed locales+fallback except they are still in current
+ for ( Locale lang: localesTracker.removed() )
+ {
+ for ( ; lang && ! localeIds.current().count( IdString(lang) ); lang = lang.fallback() )
+ { localeIds.removed().insert( IdString(lang) ); }
+ }
+
+ // Assert that TrackedLocaleIds::current is not empty.
+ // If, so fill in LanguageCode::enCode as last resort.
+ if ( localeIds.current().empty() )
+ { localeIds.current().insert( IdString(Locale::enCode) ); }
+ }
+ return *_trackedLocaleIdsPtr;
+ }
+
+
+ static void _getLocaleDeps( const Capability & cap_r, LocaleSet & store_r )