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:
authorrachytski <siarhei.rachytski@gmail.com>2012-01-31 16:25:39 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:32:50 +0300
commit6f1fcf17bd298ae8168219c6ff4d25efa7436096 (patch)
tree7034bef2ee0bca7b408f138f847db362224dcb31 /indexer/drawing_rules.hpp
parent2a241f345d8e0defe7f129aff5745289055e8719 (diff)
Resizing BaseRule id caches at startup. Closes #334
Diffstat (limited to 'indexer/drawing_rules.hpp')
-rw-r--r--indexer/drawing_rules.hpp75
1 files changed, 18 insertions, 57 deletions
diff --git a/indexer/drawing_rules.hpp b/indexer/drawing_rules.hpp
index 61c97f3a4c..7cd7724b6e 100644
--- a/indexer/drawing_rules.hpp
+++ b/indexer/drawing_rules.hpp
@@ -22,79 +22,39 @@ namespace drule
{
class BaseRule
{
- mutable buffer_vector<uint32_t, 8> m_id1, m_id2;
+ mutable buffer_vector<uint32_t, 4> m_id1, m_id2;
char m_type; // obsolete for new styles, can be removed
public:
static uint32_t const empty_id = 0xFFFFFFFF;
- BaseRule() : m_type(node | way)
- {
- }
- virtual ~BaseRule() {}
+ BaseRule();
+ virtual ~BaseRule();
- void CheckSize(buffer_vector<uint32_t, 8> & v, size_t s) const
- {
- if (v.size() < s)
- v.resize(s, empty_id);
- }
+ void CheckCacheSize(size_t s);
- uint32_t GetID(size_t threadID) const
- {
- CheckSize(m_id1, threadID + 1);
- return m_id1[threadID];
- }
-
- void SetID(size_t threadID, uint32_t id) const
- {
- CheckSize(m_id1, threadID + 1);
- m_id1[threadID] = id;
- }
-
- void MakeEmptyID(size_t threadID)
- {
- CheckSize(m_id1, threadID + 1);
- m_id1[threadID] = empty_id;
- }
+ uint32_t GetID(size_t threadID) const;
+ void SetID(size_t threadID, uint32_t id) const;
- void MakeEmptyID()
- {
- for (size_t i = 0; i < m_id1.size(); ++i)
- MakeEmptyID(i);
- }
+ void MakeEmptyID(size_t threadID);
+ void MakeEmptyID();
- uint32_t GetID2(size_t threadID) const
- {
- CheckSize(m_id2, threadID + 1);
- return m_id2[threadID];
- }
+ uint32_t GetID2(size_t threadID) const;
- void SetID2(size_t threadID, uint32_t id) const
- {
- CheckSize(m_id2, threadID + 1);
- m_id2[threadID] = id;
- }
+ void SetID2(size_t threadID, uint32_t id) const;
- void MakeEmptyID2(size_t threadID)
- {
- CheckSize(m_id2, threadID + 1);
- m_id2[threadID] = empty_id;
- }
+ void MakeEmptyID2(size_t threadID);
- void MakeEmptyID2()
- {
- for (size_t i = 0; i < m_id2.size(); ++i)
- MakeEmptyID2(i);
- }
+ void MakeEmptyID2();
void SetType(char type) { m_type = type; }
inline char GetType() const { return m_type; }
- virtual LineDefProto const * GetLine() const { return 0; }
- virtual AreaRuleProto const * GetArea() const { return 0; }
- virtual SymbolRuleProto const * GetSymbol() const { return 0; }
- virtual CaptionDefProto const * GetCaption(int) const { return 0; }
- virtual CircleRuleProto const * GetCircle() const { return 0; }
+ virtual LineDefProto const * GetLine() const;
+ virtual AreaRuleProto const * GetArea() const;
+ virtual SymbolRuleProto const * GetSymbol() const;
+ virtual CaptionDefProto const * GetCaption(int) const;
+ virtual CircleRuleProto const * GetCircle() const;
};
class RulesHolder
@@ -115,6 +75,7 @@ namespace drule
void Clean();
void ClearCaches();
+ void ResizeCaches(size_t Size);
BaseRule const * Find(Key const & k) const;