mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 04:56:39 +00:00 
			
		
		
		
	Add bound for pointers cache size, as it specified in docs
This commit is contained in:
		
							parent
							
								
									124a33d8a3
								
							
						
					
					
						commit
						c989fac67b
					
				
					 2 changed files with 7 additions and 5 deletions
				
			
		| 
						 | 
					@ -132,9 +132,11 @@ void MWWorld::Cells::writeCell (ESM::ESMWriter& writer, CellStore& cell) const
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MWWorld::Cells::Cells (const MWWorld::ESMStore& store, std::vector<ESM::ESMReader>& reader)
 | 
					MWWorld::Cells::Cells (const MWWorld::ESMStore& store, std::vector<ESM::ESMReader>& reader)
 | 
				
			||||||
: mStore (store), mReader (reader),
 | 
					: mStore (store), mReader (reader),
 | 
				
			||||||
  mIdCache (Settings::Manager::getInt("pointers cache size", "Cells"), std::pair<std::string, CellStore *> ("", (CellStore*)nullptr)),
 | 
					 | 
				
			||||||
  mIdCacheIndex (0)
 | 
					  mIdCacheIndex (0)
 | 
				
			||||||
{}
 | 
					{
 | 
				
			||||||
 | 
					    int cacheSize = std::max(Settings::Manager::getInt("pointers cache size", "Cells"), 0);
 | 
				
			||||||
 | 
					    mIdCache = IdCache(cacheSize, std::pair<std::string, CellStore *> ("", (CellStore*)nullptr));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MWWorld::CellStore *MWWorld::Cells::getExterior (int x, int y)
 | 
					MWWorld::CellStore *MWWorld::Cells::getExterior (int x, int y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -259,8 +261,7 @@ MWWorld::Ptr MWWorld::Cells::getPtr (const std::string& name, CellStore& cell,
 | 
				
			||||||
MWWorld::Ptr MWWorld::Cells::getPtr (const std::string& name)
 | 
					MWWorld::Ptr MWWorld::Cells::getPtr (const std::string& name)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // First check the cache
 | 
					    // First check the cache
 | 
				
			||||||
    for (std::vector<std::pair<std::string, CellStore *> >::iterator iter (mIdCache.begin());
 | 
					    for (IdCache::iterator iter (mIdCache.begin()); iter!=mIdCache.end(); ++iter)
 | 
				
			||||||
        iter!=mIdCache.end(); ++iter)
 | 
					 | 
				
			||||||
        if (iter->first==name && iter->second)
 | 
					        if (iter->first==name && iter->second)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Ptr ptr = getPtr (name, *iter->second);
 | 
					            Ptr ptr = getPtr (name, *iter->second);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,11 +28,12 @@ namespace MWWorld
 | 
				
			||||||
    /// \brief Cell container
 | 
					    /// \brief Cell container
 | 
				
			||||||
    class Cells
 | 
					    class Cells
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					            typedef std::vector<std::pair<std::string, CellStore *> > IdCache;
 | 
				
			||||||
            const MWWorld::ESMStore& mStore;
 | 
					            const MWWorld::ESMStore& mStore;
 | 
				
			||||||
            std::vector<ESM::ESMReader>& mReader;
 | 
					            std::vector<ESM::ESMReader>& mReader;
 | 
				
			||||||
            mutable std::map<std::string, CellStore> mInteriors;
 | 
					            mutable std::map<std::string, CellStore> mInteriors;
 | 
				
			||||||
            mutable std::map<std::pair<int, int>, CellStore> mExteriors;
 | 
					            mutable std::map<std::pair<int, int>, CellStore> mExteriors;
 | 
				
			||||||
            std::vector<std::pair<std::string, CellStore *> > mIdCache;
 | 
					            IdCache mIdCache;
 | 
				
			||||||
            std::size_t mIdCacheIndex;
 | 
					            std::size_t mIdCacheIndex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Cells (const Cells&);
 | 
					            Cells (const Cells&);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue