Belle II Software  release-05-02-19
NumberSequence.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Thomas Keck *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <framework/utilities/NumberSequence.h>
12 
13 #include <utility>
14 #include <vector>
15 
16 namespace Belle2 {
22  std::set<int64_t> generate_number_sequence(const std::string& str)
23  {
24  // Tokenize input
25  std::vector<std::string> tokens;
26  unsigned int lastdelimiter = 0;
27  for (unsigned int i = 0; i < str.size(); ++i) {
28  if (str[i] == ',') {
29  tokens.push_back(str.substr(lastdelimiter, i - lastdelimiter));
30  lastdelimiter = i + 1;
31  }
32  }
33  std::string last = str.substr(lastdelimiter);
34  if (last.size() != 0) {
35  tokens.push_back(last);
36  }
37 
38  // Convert tokens into intervals
39  std::vector<std::pair<int64_t, int64_t>> intervals;
40  intervals.reserve(tokens.size());
41  for (const auto& token : tokens) {
42  size_t interval_marker_position = token.find(':');
43  // Single number
44  if (interval_marker_position == std::string::npos) {
45  int64_t number = std::stol(token);
46  intervals.emplace_back(number, number);
47  } else {
48  int64_t interval_begin = std::stol(token.substr(0, interval_marker_position));
49  int64_t interval_end = std::stol(token.substr(interval_marker_position + 1));
50  intervals.emplace_back(interval_begin, interval_end);
51  }
52  }
53 
54  // Convert tokens into number sequence
55  std::set<int64_t> sequence;
56  for (const auto& interval : intervals) {
57  for (int64_t number = interval.first; number <= interval.second; ++number)
58  sequence.insert(number);
59  }
60 
61  return sequence;
62  }
63 
65 }
Belle2::generate_number_sequence
std::set< int64_t > generate_number_sequence(const std::string &str)
Generate a sequence of numbers defined by a string.
Definition: NumberSequence.cc:30
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19