Coverage Report

Created: 2026-06-13 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libwpg/src/lib/WPGDashArray.cpp
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2
/* libwpg
3
 * Version: MPL 2.0 / LGPLv2.1+
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * Major Contributor(s):
10
 * Copyright (C) 2006 Ariya Hidayat (ariya@kde.org)
11
 *
12
 * For minor contributions see the git repository.
13
 *
14
 * Alternatively, the contents of this file may be used under the terms
15
 * of the GNU Lesser General Public License Version 2.1 or later
16
 * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
17
 * applicable instead of those above.
18
 *
19
 * For further information visit http://libwpg.sourceforge.net
20
 */
21
22
/* "This product is not manufactured, approved, or supported by
23
 * Corel Corporation or Corel Corporation Limited."
24
 */
25
26
#include "WPGDashArray.h"
27
28
#include <vector>
29
30
namespace libwpg
31
{
32
class WPGDashArrayPrivate
33
{
34
public:
35
496k
  WPGDashArrayPrivate() : dashes(), dots1(0), dots2(0),
36
496k
    dots1len(0.0), dots2len(0.0), gap(0.0) {}
37
  void _recalculateDots();
38
  std::vector<double> dashes;
39
  int dots1;
40
  int dots2;
41
  double dots1len;
42
  double dots2len;
43
  double gap;
44
};
45
}
46
47
void libwpg::WPGDashArrayPrivate::_recalculateDots()
48
2.82M
{
49
2.82M
  dots1 = dots2 = 0,
50
2.82M
  dots1len = dots2len = gap = 0.0;
51
52
2.82M
  if (dashes.size() >= 2)
53
2.04M
  {
54
2.04M
    dots1len = dashes[0];
55
2.04M
    gap = dashes[1];
56
2.04M
  }
57
58
2.82M
  auto count = unsigned(dashes.size() / 2);
59
2.82M
  unsigned i = 0;
60
7.17M
  for (; i < count;)
61
5.75M
  {
62
5.75M
    if (dots1len <= dashes[2*i] && dots1len >= dashes[2*i])
63
4.34M
      dots1++;
64
1.40M
    else
65
1.40M
      break;
66
4.34M
    gap = gap < dashes[2*i+1] ?  dashes[2*i+1] : gap;
67
4.34M
    i++;
68
4.34M
  }
69
2.82M
  if (i < count)
70
1.40M
  {
71
1.40M
    dots2len = dashes[2*i];
72
1.40M
    gap = gap < dashes[2*i+1] ? dashes[2*i+1] : gap;
73
1.40M
  }
74
4.65M
  for (; i < count;)
75
2.90M
  {
76
2.90M
    if (dots2len <= dashes[2*i] && dots2len >= dashes[2*i])
77
1.83M
      dots2++;
78
1.07M
    else
79
1.07M
      break;
80
1.83M
    gap = gap < dashes[2*i+1] ? dashes[2*i+1] : gap;
81
1.83M
    i++;
82
1.83M
  }
83
2.82M
  if (!dots2)
84
1.42M
  {
85
1.42M
    dots2 = dots1;
86
1.42M
    dots2len = dots1len;
87
1.42M
  }
88
2.82M
}
89
90
91
496k
libwpg::WPGDashArray::WPGDashArray() : d(new libwpg::WPGDashArrayPrivate())
92
496k
{
93
496k
  d->_recalculateDots();
94
496k
}
95
96
libwpg::WPGDashArray::~WPGDashArray()
97
496k
{
98
496k
}
99
100
libwpg::WPGDashArray::WPGDashArray(const libwpg::WPGDashArray &dash):
101
0
  d(new libwpg::WPGDashArrayPrivate())
102
0
{
103
0
  d->dashes = dash.d->dashes;
104
0
  d->_recalculateDots();
105
0
}
106
107
libwpg::WPGDashArray &libwpg::WPGDashArray::operator=(const libwpg::WPGDashArray &dash)
108
300k
{
109
300k
  if (this != &dash)
110
300k
  {
111
300k
    d->dashes = dash.d->dashes;
112
300k
    d->_recalculateDots();
113
300k
  }
114
300k
  return *this;
115
300k
}
116
117
int libwpg::WPGDashArray::getDots1() const
118
74.8k
{
119
74.8k
  return d->dots1;
120
74.8k
}
121
122
double libwpg::WPGDashArray::getDots1Length() const
123
38.2k
{
124
38.2k
  return d->dots1len;
125
38.2k
}
126
127
int libwpg::WPGDashArray::getDots2() const
128
51.7k
{
129
51.7k
  return d->dots2;
130
51.7k
}
131
132
double libwpg::WPGDashArray::getDots2Length() const
133
38.2k
{
134
38.2k
  return d->dots2len;
135
38.2k
}
136
137
double libwpg::WPGDashArray::getDistance() const
138
38.2k
{
139
38.2k
  return d->gap;
140
38.2k
}
141
142
void libwpg::WPGDashArray::add(double p)
143
2.02M
{
144
2.02M
  d->dashes.push_back(p);
145
2.02M
  d->_recalculateDots();
146
2.02M
}
147
/* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */