Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Gorshenin <y@maps.me>2015-04-27 16:55:03 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:46:27 +0300
commit3cd1aabf377cbc5de2e74dc3ff196b018a8c6d34 (patch)
tree0907aedc125590ce2b204f23485136b68b7edb2c /indexer/mwm_set.cpp
parent6704c8e070ead2ab459b05c2c3b214eafc34b3a8 (diff)
[index] MwmValues are wrapped in shared_ptr's.
Diffstat (limited to 'indexer/mwm_set.cpp')
-rw-r--r--indexer/mwm_set.cpp31
1 files changed, 13 insertions, 18 deletions
diff --git a/indexer/mwm_set.cpp b/indexer/mwm_set.cpp
index c41a961b12..f4efd1c83f 100644
--- a/indexer/mwm_set.cpp
+++ b/indexer/mwm_set.cpp
@@ -42,17 +42,15 @@ MwmSet::MwmLock::MwmLock(MwmSet & mwmSet, string const & fileName)
m_value = m_mwmSet->LockValueImpl(m_mwmId);
}
-MwmSet::MwmLock::MwmLock(MwmSet & mwmSet, MwmId mwmId, MwmValueBase * value)
+MwmSet::MwmLock::MwmLock(MwmSet & mwmSet, MwmId mwmId, shared_ptr<MwmValueBase> value)
: m_mwmSet(&mwmSet), m_mwmId(mwmId), m_value(value)
{
}
MwmSet::MwmLock::MwmLock(MwmLock && lock)
- : m_mwmSet(lock.m_mwmSet), m_mwmId(lock.m_mwmId), m_value(lock.m_value)
+ : m_mwmSet(lock.m_mwmSet), m_mwmId(lock.m_mwmId), m_value(move(lock.m_value))
{
- lock.m_mwmId = 0;
lock.m_mwmId = MwmSet::INVALID_MWM_ID;
- lock.m_value = 0;
}
MwmSet::MwmLock::~MwmLock()
@@ -245,17 +243,17 @@ MwmInfo const & MwmSet::GetMwmInfo(MwmId id) const
return m_info[id];
}
-MwmSet::MwmValueBase * MwmSet::LockValue(MwmId id)
+shared_ptr<MwmSet::MwmValueBase> MwmSet::LockValue(MwmId id)
{
lock_guard<mutex> lock(m_lock);
return LockValueImpl(id);
}
-MwmSet::MwmValueBase * MwmSet::LockValueImpl(MwmId id)
+shared_ptr<MwmSet::MwmValueBase> MwmSet::LockValueImpl(MwmId id)
{
ASSERT_LESS(id, m_info.size(), ());
if (id >= m_info.size())
- return nullptr;
+ return shared_ptr<MwmValueBase>();
UpdateMwmInfo(id);
if (!m_info[id].IsUpToDate())
@@ -268,7 +266,7 @@ MwmSet::MwmValueBase * MwmSet::LockValueImpl(MwmId id)
{
if (it->first == id)
{
- MwmValueBase * result = it->second;
+ shared_ptr<MwmValueBase> result = it->second;
m_cache.erase(it);
return result;
}
@@ -276,17 +274,17 @@ MwmSet::MwmValueBase * MwmSet::LockValueImpl(MwmId id)
return CreateValue(m_info[id].m_fileName);
}
-void MwmSet::UnlockValue(MwmId id, MwmValueBase * p)
+void MwmSet::UnlockValue(MwmId id, shared_ptr<MwmValueBase> p)
{
lock_guard<mutex> lock(m_lock);
UnlockValueImpl(id, p);
}
-void MwmSet::UnlockValueImpl(MwmId id, MwmValueBase * p)
+void MwmSet::UnlockValueImpl(MwmId id, shared_ptr<MwmValueBase> p)
{
ASSERT(p, (id));
ASSERT_LESS(id, m_info.size(), ());
- if (id >= m_info.size() || p == 0)
+ if (id >= m_info.size() || !p.get())
return;
ASSERT_GREATER(m_info[id].m_lockCount, 0, ());
@@ -300,12 +298,9 @@ void MwmSet::UnlockValueImpl(MwmId id, MwmValueBase * p)
if (m_cache.size() > m_cacheSize)
{
ASSERT_EQUAL(m_cache.size(), m_cacheSize + 1, ());
- delete m_cache.front().second;
m_cache.pop_front();
}
}
- else
- delete p;
}
void MwmSet::ClearCache()
@@ -317,8 +312,6 @@ void MwmSet::ClearCache()
void MwmSet::ClearCacheImpl(CacheType::iterator beg, CacheType::iterator end)
{
- for (CacheType::iterator it = beg; it != end; ++it)
- delete it->second;
m_cache.erase(beg, end);
}
@@ -327,10 +320,12 @@ namespace
struct MwmIdIsEqualTo
{
MwmSet::MwmId m_id;
+
explicit MwmIdIsEqualTo(MwmSet::MwmId id) : m_id(id) {}
- bool operator() (pair<MwmSet::MwmId, MwmSet::MwmValueBase *> const & p) const
+
+ bool operator()(pair<MwmSet::MwmId, shared_ptr<MwmSet::MwmValueBase>> const & p) const
{
- return (p.first == m_id);
+ return p.first == m_id;
}
};
}