Browse code

Fix more C++-17 issues

Steffen Neumann authored on 12/02/2023 13:59:41
Showing 6 changed files

... ...
@@ -322,7 +322,7 @@ RcppExport SEXP decomposeIsotopes(SEXP v_masses, SEXP v_abundances, SEXP s_error
322 322
 				transform(candidate_abundances.begin(),			// begin of source range
323 323
 					candidate_abundances.begin() + size,		// end of source range
324 324
 					candidate_abundances.begin(), 			// destination
325
-					bind2nd(multiplies<abundance_type>(), scale));	// operation (*scale)
325
+					[scale](abundance_type a) { return a * scale; }); // operation (*scale)
326 326
 			}
327 327
 				
328 328
 		}
... ...
@@ -29,9 +29,9 @@ Alphabet::mass_type Alphabet::getMass(const name_type& name) const
29 29
 
30 30
 
31 31
 bool Alphabet::hasName(const name_type& name) const {
32
-	return std::find_if(elements.begin(), elements.end(),
33
-		compose_f_gx(std::bind2nd(std::equal_to<name_type>(), name),
34
-		std::mem_fun_ref(&element_type::getName))) < elements.end();
32
+        return std::find_if(elements.begin(), elements.end(), [name](const auto& elem) {
33
+	  return std::equal_to<name_type>()(elem.getName(), name);
34
+	}) != elements.end();
35 35
 }
36 36
 
37 37
 
... ...
@@ -68,11 +68,9 @@ Alphabet::masses_type Alphabet::getAverageMasses() const {
68 68
 
69 69
 
70 70
 void Alphabet::sortByNames() {
71
-	std::sort(elements.begin(), elements.end(),
72
-				compose_f_gx_hy(
73
-					std::less<name_type>(),
74
-					std::mem_fun_ref(&element_type::getName),
75
-					std::mem_fun_ref(&element_type::getName)));
71
+        std::sort(elements.begin(), elements.end(), [](const auto& lhs, const auto& rhs) {
72
+	  return std::less<name_type>()(lhs.getName(), rhs.getName());
73
+	});
76 74
 }
77 75
 
78 76
 
... ...
@@ -83,7 +83,7 @@ void LinearPointSetMatcher::swap(double& d1, double& d2) {
83 83
 
84 84
 std::unique_ptr<std::map<int,int> > LinearPointSetMatcher::getMapping() const {
85 85
 	if (results.mapping.get() == 0) {
86
-		return std::unique_ptr<std::map<int,int> >(0); // TODO throw sth. instead
86
+		return std::unique_ptr<std::map<int,int> >(new std::map<int,int>()); // TODO throw sth. instead
87 87
 	} else {
88 88
 		// aaargh, this syntax is awful, i hate it, hate it, hate it...
89 89
 		return std::unique_ptr<std::map<int,int> >(new std::map<int,int>(*(results.mapping)));
... ...
@@ -278,7 +278,7 @@ void LinearPointSetMatcher::countMatchesOneToOne(
278 278
 			#endif
279 279
 		}
280 280
 
281
-		std::unique_ptr<std::map<int,int> > mapping(0);
281
+		std::unique_ptr<std::map<int,int> > mapping(new std::map<int,int>());
282 282
 		// evaluate match matrix: count out score using...
283 283
 		if (!restrict_oneToOne) {
284 284
 			// ... greedy counting scheme
... ...
@@ -300,7 +300,7 @@ void LinearPointSetMatcher::countMatchesOneToOne(
300 300
 			results.centerB = j;
301 301
 			results.bestscale = (*p).scale;
302 302
 			results.besttranslation=-results.bestscale*a_first[i] + b_first[j] + diff;
303
-			results.mapping=mapping;
303
+			results.mapping=std::move(mapping);
304 304
 		}
305 305
 	}
306 306
 }
... ...
@@ -323,7 +323,7 @@ int LinearPointSetMatcher::match(RandomAccessIterator a_first, RandomAccessItera
323 323
 	if (oneToOne) {
324 324
 		results.mapping = std::unique_ptr<std::map<int,int> >(new std::map<int,int>);
325 325
 	} else {
326
-		results.mapping = std::unique_ptr<std::map<int,int> >(0);
326
+		results.mapping = std::unique_ptr<std::map<int,int> >(new std::map<int,int>());
327 327
 	}
328 328
 
329 329
 	#ifndef NDEBUG
... ...
@@ -29,7 +29,7 @@ ComposedElement::ComposedElement(const name_type& sequence, const Alphabet& alph
29 29
 	} else {
30 30
 		parser = std::unique_ptr<sequence_parser_type>(new MoleculeSequenceParser);
31 31
 	}
32
-	this->initializeElements(alphabet, parser);
32
+	this->initializeElements(alphabet, std::move(parser) );
33 33
 }
34 34
 			
35 35
 ComposedElement::ComposedElement(const std::vector<unsigned int>& decomposition, 
... ...
@@ -71,14 +71,14 @@ template <typename T>
71 71
 std::vector<T> getPositiveNeighborhoodSet(T middle,
72 72
 					std::pair<T, T> minMaxElements, T range, T granularity) {
73 73
 	std::vector<T> valuesRange = getNeighborhoodSet(middle, minMaxElements, range, granularity);
74
-	valuesRange.erase(std::remove_if(valuesRange.begin(), valuesRange.end(), std::bind2nd(std::less<T>(), 0)), valuesRange.end());
74
+	valuesRange.erase(std::remove_if(valuesRange.begin(), valuesRange.end(), [](const T& x) { return x < 0; }, 0), valuesRange.end());
75 75
 	return valuesRange;
76 76
 }
77 77
 
78 78
 template <typename T>
79 79
 std::vector<T> getPositiveNeighborhoodSet(T middle, T range, T granularity) {
80 80
 	std::vector<T> valuesRange = getNeighborhoodSet(middle, range, granularity);
81
-	valuesRange.erase(std::remove_if(valuesRange.begin(), valuesRange.end(), std::bind2nd(std::less<T>(), 0)), valuesRange.end());
81
+	valuesRange.erase(std::remove_if(valuesRange.begin(), valuesRange.end(), [](const T& x) { return x < 0; }), valuesRange.end());
82 82
 	return valuesRange;
83 83
 }
84 84