Coverage Report

Created: 2026-03-31 06:50

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/rdkit/Code/RDGeneral/Ranking.h
Line
Count
Source
1
//
2
//  Copyright (C) 2004-2015 Greg Landrum and Rational Discovery LLC
3
//
4
//   @@ All Rights Reserved @@
5
//  This file is part of the RDKit.
6
//  The contents are covered by the terms of the BSD license
7
//  which is included in the file license.txt, found at the root
8
//  of the RDKit source tree.
9
//
10
11
//! \file Ranking.h
12
/*!
13
    \brief Utility functionality used to rank sequences
14
15
    Much of this used to be in GraphMol/RankAtoms.h
16
*/
17
#include <RDGeneral/export.h>
18
#ifndef RD_RANKING_H
19
#define RD_RANKING_H
20
21
#include <vector>
22
#include <functional>
23
#include <algorithm>
24
#include <cstdint>
25
26
namespace Rankers {
27
inline auto pairGreater = [](const auto &v1, const auto &v2) {
28
  return v1.first > v2.first;
29
};
30
31
//! function for implementing < on two std::pairs.  The first entries are
32
/// compared.
33
24.4k
inline auto pairLess = [](const auto &v1, const auto &v2) {
34
24.4k
  return v1.first < v2.first;
35
24.4k
};
36
37
//! ranks the entries in a vector
38
/*!
39
  \param vect the vector to rank
40
  \param res  is used to return the ranks of each entry
41
*/
42
template <typename T1, typename T2>
43
void rankVect(const std::vector<T1> &vect, T2 &res) {
44
  PRECONDITION(res.size() >= vect.size(), "vector size mismatch");
45
  unsigned int nEntries = rdcast<unsigned int>(vect.size());
46
47
  std::vector<unsigned int> indices(nEntries);
48
  for (unsigned int i = 0; i < nEntries; ++i) {
49
    indices[i] = i;
50
  }
51
  std::sort(indices.begin(), indices.end(),
52
            [&](auto i1, auto i2) { return vect[i1] < vect[i2]; });
53
54
  int currRank = 0;
55
  unsigned int lastIdx = indices[0];
56
  for (auto idx : indices) {
57
    if (vect[idx] == vect[lastIdx]) {
58
      res[idx] = currRank;
59
    } else {
60
      res[idx] = ++currRank;
61
      lastIdx = idx;
62
    }
63
  }
64
}
65
}  // namespace Rankers
66
#endif