blob: 63ebf7a9a7147cf81e2e9e7e31aa5c9a8cfb54ae [file] [log] [blame]
Ravago Jones486de802021-05-19 20:47:55 -07001#include "y2021_bot3/constants.h"
2
Tyler Chatowbf0609c2021-07-31 16:13:27 -07003#include <cinttypes>
Ravago Jones486de802021-05-19 20:47:55 -07004#include <map>
5
6#if __has_feature(address_sanitizer)
7#include "sanitizer/lsan_interface.h"
8#endif
9
10#include "absl/base/call_once.h"
Philipp Schrader790cb542023-07-05 21:06:52 -070011#include "glog/logging.h"
12
Ravago Jones486de802021-05-19 20:47:55 -070013#include "aos/mutex/mutex.h"
14#include "aos/network/team_number.h"
15
Stephan Pleinesf63bde82024-01-13 15:59:33 -080016namespace y2021_bot3::constants {
Ravago Jones486de802021-05-19 20:47:55 -070017
18const int Values::kZeroingSampleSize;
19
20namespace {
21
22const uint16_t kCompTeamNumber = 971;
23const uint16_t kPracticeTeamNumber = 9971;
24const uint16_t kCodingRobotTeamNumber = 7971;
25
26const Values *DoGetValuesForTeam(uint16_t team) {
27 Values *const r = new Values();
28
29 switch (team) {
30 // A set of constants for tests.
31 case 1:
32 break;
33
34 case kCompTeamNumber:
35 break;
36
37 case kPracticeTeamNumber:
38 break;
39
40 case kCodingRobotTeamNumber:
41 break;
42
43 default:
Brian Silvermanf4d329c2021-11-04 19:32:10 -070044 LOG(FATAL) << "unknown team: " << team;
Ravago Jones486de802021-05-19 20:47:55 -070045 }
46
47 return r;
48}
49
50void DoGetValues(const Values **result) {
51 uint16_t team = ::aos::network::GetTeamNumber();
Brian Silvermanf4d329c2021-11-04 19:32:10 -070052 LOG(INFO) << "creating a Constants for team: " << team;
Ravago Jones486de802021-05-19 20:47:55 -070053 *result = DoGetValuesForTeam(team);
54}
55
56} // namespace
57
58const Values &GetValues() {
59 static absl::once_flag once;
60 static const Values *result;
61 absl::call_once(once, DoGetValues, &result);
62 return *result;
63}
64
65const Values &GetValuesForTeam(uint16_t team_number) {
66 static ::aos::Mutex mutex;
67 ::aos::MutexLocker locker(&mutex);
68
69 // IMPORTANT: This declaration has to stay after the mutex is locked to avoid
70 // race conditions.
71 static ::std::map<uint16_t, const Values *> values;
72
73 if (values.count(team_number) == 0) {
74 values[team_number] = DoGetValuesForTeam(team_number);
75#if __has_feature(address_sanitizer)
76 __lsan_ignore_object(values[team_number]);
77#endif
78 }
79 return *values[team_number];
80}
81
Stephan Pleinesf63bde82024-01-13 15:59:33 -080082} // namespace y2021_bot3::constants