From 77ebdd96fa0901359efa5cf7c2048818e35a540a Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Thu, 12 Nov 2015 07:35:22 +0100
Subject: [PATCH] [T/FileIO] XmlGmlInterface: Make the creation of Polylines
 more readable.

---
 Tests/FileIO/TestXmlGmlReader.cpp | 51 +++++++++++++++----------------
 1 file changed, 25 insertions(+), 26 deletions(-)

diff --git a/Tests/FileIO/TestXmlGmlReader.cpp b/Tests/FileIO/TestXmlGmlReader.cpp
index fa9f0bd5ee7..5491abdc1a7 100644
--- a/Tests/FileIO/TestXmlGmlReader.cpp
+++ b/Tests/FileIO/TestXmlGmlReader.cpp
@@ -92,36 +92,35 @@ public:
 
 	void createPolylines()
 	{
-		auto const points = geo_objects.getPointVec(geo_name);
-		const std::vector<std::size_t> pnt_id_map(
-			geo_objects.getPointVecObj(geo_name)->getIDMap());
+		auto createPolyline = [](GeoLib::PointVec const& pnt_vec,
+			std::vector<GeoLib::Polyline*> & lines, std::size_t line_id,
+			std::vector<std::size_t> pnt_ids,
+			std::map<std::string,std::size_t> & line_name_map,
+			std::string const& name)
+		{
+			auto const & pnt_id_map(pnt_vec.getIDMap());
+			lines[line_id] = new GeoLib::Polyline(*(pnt_vec.getVector()));
+			for (std::size_t k(0); k<pnt_ids.size(); ++k) {
+				lines[line_id]->addPoint(pnt_id_map[pnt_ids[k]]);
+			}
+
+			if (!name.empty())
+				line_name_map.insert(std::make_pair(name, line_id));
+		};
+
+		auto const& pnt_vec = *(geo_objects.getPointVecObj(geo_name));
 
 		auto lines = std::unique_ptr<std::vector<GeoLib::Polyline*>>(
 			new std::vector<GeoLib::Polyline*>(5));
-		std::map<std::string, std::size_t>* ply_names =
+		std::map<std::string, std::size_t>* name_map =
 			new std::map<std::string, std::size_t>;
-		(*lines)[0] = new GeoLib::Polyline(*points);
-		(*lines)[0]->addPoint(pnt_id_map[0]);
-		(*lines)[0]->addPoint(pnt_id_map[1]);
-		(*lines)[0]->addPoint(pnt_id_map[2]);
-		ply_names->insert(std::pair<std::string, std::size_t>("left", 0));
-		(*lines)[1] = new GeoLib::Polyline(*points);
-		(*lines)[1]->addPoint(pnt_id_map[3]);
-		(*lines)[1]->addPoint(pnt_id_map[4]);
-		(*lines)[1]->addPoint(pnt_id_map[5]);
-		ply_names->insert(std::pair<std::string, std::size_t>("center", 1));
-		(*lines)[2] = new GeoLib::Polyline(*points);
-		(*lines)[2]->addPoint(pnt_id_map[0]);
-		(*lines)[2]->addPoint(pnt_id_map[3]);
-		(*lines)[3] = new GeoLib::Polyline(*points);
-		(*lines)[3]->addPoint(pnt_id_map[3]);
-		(*lines)[3]->addPoint(pnt_id_map[6]);
-		(*lines)[4] = new GeoLib::Polyline(*points);
-		(*lines)[4]->addPoint(pnt_id_map[6]);
-		(*lines)[4]->addPoint(pnt_id_map[7]);
-		(*lines)[4]->addPoint(pnt_id_map[8]);
-		ply_names->insert(std::pair<std::string, std::size_t>("right", 4));
-		geo_objects.addPolylineVec(std::move(lines), geo_name, ply_names);
+
+		createPolyline(pnt_vec, *(lines.get()), 0, {0, 1, 2}, *name_map, "left");
+		createPolyline(pnt_vec, *(lines.get()), 1, {3, 4, 5}, *name_map, "center");
+		createPolyline(pnt_vec, *(lines.get()), 2, {0, 3}, *name_map, "");
+		createPolyline(pnt_vec, *(lines.get()), 3, {3, 6}, *name_map, "");
+		createPolyline(pnt_vec, *(lines.get()), 4, {6, 7, 8}, *name_map, "right");
+		geo_objects.addPolylineVec(std::move(lines), geo_name, name_map);
 	}
 
 	void checkPolylineProperties()
-- 
GitLab