ZRCola::mapping is generic now

This commit is contained in:
Simon Rozman
2016-04-20 12:24:23 +02:00
parent 5e4331903b
commit a021dd31f7
4 changed files with 46 additions and 31 deletions

View File

@@ -20,51 +20,51 @@
#include "stdafx.h"
size_t ZRCola::mapping_vector::to_composed(_In_ size_t decmp) const
size_t ZRCola::mapping_vector::to_src(_In_ size_t dst) const
{
for (size_type l = 0, r = size();;) {
if (l < r) {
size_type m = (l + r) / 2;
const mapping &el = (*this)[m];
if (decmp < el.decmp) r = m;
else if (el.decmp < decmp) l = m + 1;
if ( dst < el.dst) r = m;
else if (el.dst < dst) l = m + 1;
else {
// An exact match found.
return el.cmp;
return el.src;
}
} else if (l) {
// We found a map interval.
const mapping &el = (*this)[l - 1];
return el.cmp + (decmp - el.decmp);
return el.src + (dst - el.dst);
} else {
// The decomposed character index is far left.
return decmp;
// The destination character index is far left.
return dst;
}
}
}
size_t ZRCola::mapping_vector::to_decomposed(_In_ size_t cmp) const
size_t ZRCola::mapping_vector::to_dst(_In_ size_t src) const
{
for (size_type l = 0, r = size();;) {
if (l < r) {
size_type m = (l + r) / 2;
const mapping &el = (*this)[m];
if (cmp < el.cmp) r = m;
else if (el.cmp < cmp) l = m + 1;
if ( src < el.src) r = m;
else if (el.src < src) l = m + 1;
else {
// An exact match found.
return el.decmp;
return el.dst;
}
} else if (l) {
// We found a map interval.
const mapping &el = (*this)[l - 1];
return el.decmp + (cmp - el.cmp);
return el.dst + (src - el.src);
} else {
// The composed character index is far left.
return cmp;
// The source character index is far left.
return src;
}
}
}