aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/PositionCache.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/PositionCache.cxx')
-rw-r--r--src/PositionCache.cxx16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx
index c5ba231de..c302f8581 100644
--- a/src/PositionCache.cxx
+++ b/src/PositionCache.cxx
@@ -561,7 +561,17 @@ bool BreakFinder::More() const {
}
PositionCacheEntry::PositionCacheEntry() :
- styleNumber(0), len(0), clock(0), positions(0) {
+ styleNumber(0), len(0), clock(0), positions(nullptr) {
+}
+
+// Copy constructor not currently used, but needed for being element in std::vector.
+PositionCacheEntry::PositionCacheEntry(const PositionCacheEntry &other) :
+ styleNumber(other.styleNumber), len(other.styleNumber), clock(other.styleNumber), positions(nullptr) {
+ if (other.positions) {
+ const size_t lenData = len + (len / sizeof(XYPOSITION)) + 1;
+ positions = new XYPOSITION[lenData];
+ memcpy(positions, other.positions, lenData * sizeof(XYPOSITION));
+ }
}
void PositionCacheEntry::Set(unsigned int styleNumber_, const char *s_,
@@ -571,7 +581,7 @@ void PositionCacheEntry::Set(unsigned int styleNumber_, const char *s_,
len = len_;
clock = clock_;
if (s_ && positions_) {
- positions = new XYPOSITION[len + (len / 4) + 1];
+ positions = new XYPOSITION[len + (len / sizeof(XYPOSITION)) + 1];
for (unsigned int i=0; i<len; i++) {
positions[i] = positions_[i];
}
@@ -585,7 +595,7 @@ PositionCacheEntry::~PositionCacheEntry() {
void PositionCacheEntry::Clear() {
delete []positions;
- positions = 0;
+ positions = nullptr;
styleNumber = 0;
len = 0;
clock = 0;