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