Branch data Line data Source code
1 : : #include "meshkit/AF2Polygon2D.hpp"
2 : : #include "meshkit/Error.hpp"
3 : :
4 : 31594 : AF2Polygon2D::AF2Polygon2D(
5 : : std::list<const AF2Point2D*> const & polygonVertices) :
6 : 31594 : numVertices(polygonVertices.size())
7 : : {
8 : : typedef std::list<const AF2Point2D*>::const_iterator ItrType;
9 : :
10 : : // check for the exceptional case of a null pointer in the list of vertices
11 [ + - + - ]: 252770 : for (ItrType itr = polygonVertices.begin();
[ + + ]
12 : 126386 : itr != polygonVertices.end(); ++itr)
13 : : {
14 [ + - ][ + + ]: 94792 : if (*itr == NULL)
15 : : {
16 [ + - ]: 1 : MeshKit::Error badArg(MeshKit::MK_BAD_INPUT);
17 : : badArg.set_string(
18 [ + - ]: 1 : "polygonVertices may not contain a null pointer in AF2Polygon2D.");
19 [ + - ]: 1 : throw badArg;
20 : : }
21 : : }
22 : :
23 : : // allocate memory and copy the vertex pointers
24 [ + - ]: 31593 : vertices = new const AF2Point2D*[numVertices];
25 : 31593 : int indx = 0;
26 [ + - + - ]: 252766 : for (ItrType itr = polygonVertices.begin();
[ + + ]
27 : 126383 : itr != polygonVertices.end(); ++itr)
28 : : {
29 [ + - ]: 94790 : vertices[indx] = *itr;
30 : 94790 : ++indx;
31 : : }
32 : 31593 : }
33 : :
34 : 31594 : AF2Polygon2D::~AF2Polygon2D()
35 : : {
36 [ + - ]: 31594 : delete[] vertices;
37 : 31594 : }
38 : :
39 : 2 : AF2Polygon2D::AF2Polygon2D(const AF2Polygon2D & toCopy) :
40 : 2 : numVertices(toCopy.numVertices)
41 : : {
42 [ + - ]: 2 : vertices = new const AF2Point2D*[numVertices];
43 [ + + ]: 8 : for (unsigned int indx = 0; indx < numVertices; ++indx)
44 : : {
45 : 6 : vertices[indx] = toCopy.vertices[indx];
46 : : }
47 : 2 : }
48 : :
49 : 1 : AF2Polygon2D& AF2Polygon2D::operator=(const AF2Polygon2D & rhs)
50 : : {
51 : : // directly copy the number of vertices
52 : 1 : numVertices = rhs.numVertices;
53 : :
54 : : // allocate new array in temporary location
55 : : // and copy the pointers into the temporary array
56 [ + - ]: 1 : const AF2Point2D** tempVertices = new const AF2Point2D*[numVertices];
57 [ + + ]: 4 : for (unsigned int indx = 0; indx < numVertices; ++indx)
58 : : {
59 : 3 : tempVertices[indx] = rhs.vertices[indx];
60 : : }
61 : :
62 : : // delete what used to be held by the array of vertices
63 : : // (may be null if default constructor was used)
64 [ + - ]: 1 : delete[] vertices;
65 : :
66 : : // transfer ownership from the temporary array to a member of this object
67 : 1 : vertices = tempVertices;
68 : 1 : tempVertices = NULL; // not necessary, but to be explicit
69 : :
70 : 1 : return *this;
71 : : }
72 : :
73 : 130167 : unsigned int AF2Polygon2D::getNumVertices() const
74 : : {
75 : 130167 : return numVertices;
76 : : }
77 : :
78 : 122498 : const AF2Point2D* AF2Polygon2D::getVertex(unsigned int vtxNum) const
79 : : {
80 [ + + ]: 122498 : if (vtxNum >= numVertices)
81 : : {
82 [ + - ]: 1 : MeshKit::Error badArg(MeshKit::MK_BAD_INPUT);
83 [ + - ]: 1 : badArg.set_string("The vertex index is too large.");
84 [ + - ]: 1 : throw badArg;
85 : : }
86 : 122497 : return vertices[vtxNum];
87 : : }
|