-
Notifications
You must be signed in to change notification settings - Fork 496
Expand file tree
/
Copy pathAnalysisTask.cxx
More file actions
68 lines (60 loc) · 2.03 KB
/
AnalysisTask.cxx
File metadata and controls
68 lines (60 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Copyright 2019-2026 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
#include <string>
namespace o2::framework
{
/// Convert a CamelCase task struct name to snake-case task name
std::string type_to_task_name(std::string_view const& camelCase)
{
std::string result;
result.reserve(camelCase.size() * 2 + 2);
// The first character is always -.
result += "-";
result += static_cast<char>(std::tolower(camelCase[0]));
for (auto it = camelCase.begin() + 1; it != camelCase.end(); ++it) {
if (std::isupper(*it) && *(it - 1) != '-') {
result += '-';
}
result += static_cast<char>(std::tolower(*it));
}
// Post-process to consolidate common ALICE abbreviations
// Process backwards to handle patterns correctly
static const struct {
std::string_view pattern;
std::string_view replacement;
} abbreviations[] = {
{"-e-m-c-a-l", "-emcal"},
{"-e-m-c", "-emc"}
};
std::string consolidated;
consolidated.reserve(result.size());
for (int i = result.size() - 1; i >= 0;) {
bool matched = false;
for (const auto& abbr : abbreviations) {
int startPos = i - abbr.pattern.size() + 1;
if (startPos >= 0 && result.compare(startPos, abbr.pattern.size(), abbr.pattern.data()) == 0) {
consolidated.insert(0, abbr.replacement);
i = startPos - 1;
matched = true;
break;
}
}
if (!matched) {
consolidated.insert(0, 1, result[i]);
--i;
}
}
if (consolidated[0] == '-') {
return std::string(consolidated.data() + 1);
}
return consolidated;
}
} // namespace o2::framework