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:
authorExMix <rahuba.youri@mapswithme.com>2014-08-13 16:56:55 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:24:47 +0300
commitb2f5b1a26cacc3277c8026f38c8ef0810dd24ddb (patch)
treec21a1e1bce8d7f48ba54f2160a1c6b32eb9e7d2c /drape/stipple_pen_resource.cpp
parent3587e8ccc934fca003a04906f154c7d9ec43cb44 (diff)
[drape] encode stipple pattern into uint64_t
Diffstat (limited to 'drape/stipple_pen_resource.cpp')
-rw-r--r--drape/stipple_pen_resource.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/drape/stipple_pen_resource.cpp b/drape/stipple_pen_resource.cpp
index 266076901d..53e6f46f61 100644
--- a/drape/stipple_pen_resource.cpp
+++ b/drape/stipple_pen_resource.cpp
@@ -1,6 +1,7 @@
#include "stipple_pen_resource.hpp"
#include "../std/numeric.hpp"
+#include "../std/sstream.hpp"
namespace dp
{
@@ -42,7 +43,34 @@ m2::RectU StipplePenPacker::PackResource(uint32_t width)
return m2::RectU(xOffset, yOffset, xOffset + width, yOffset + 1);
}
-StipplePenResource::StipplePenResource(StipplePenKey const & key)
+StipplePenKey::StipplePenKey(StipplePenInfo const & info)
+ : m_keyValue(0)
+{
+ // encoding scheme
+ // 63 - 61 bits = size of pattern in range [1 : 8]
+ // 60 - 53 bits = first value of pattern in range [1 : 128]
+ // 52 - 45 bits = second value of pattern
+ // ....
+ // 0 - 5 bits = reserved
+
+ uint32_t patternSize = info.m_pattern.size();
+ ASSERT(patternSize > 1, ());
+ ASSERT(patternSize < 9, ());
+
+ m_keyValue = patternSize - 1; // we code value 1 as 000 and value 8 as 111
+ for (size_t i = 0; i < patternSize; ++i)
+ {
+ m_keyValue <<=7;
+ ASSERT(info.m_pattern[i] > 0, ()); // we have 7 bytes for value. value = 1 encode like 0000000
+ ASSERT(info.m_pattern[i] < 129, ()); // value = 128 encode like 1111111
+ uint32_t value = info.m_pattern[i] - 1;
+ m_keyValue += value;
+ }
+
+ m_keyValue <<= ((8 - patternSize) * 7 + 5);
+}
+
+StipplePenResource::StipplePenResource(StipplePenInfo const & key)
: m_key(key)
{
uint32_t fullPattern = accumulate(m_key.m_pattern.begin(), m_key.m_pattern.end(), 0);
@@ -87,5 +115,12 @@ void StipplePenResource::Rasterize(void * buffer)
}
}
+string DebugPrint(const StipplePenKey & key)
+{
+ ostringstream out;
+ out << "0x" << hex << key.m_keyValue;
+ return out.str();
+}
+
}