[wpilibc] Add mechanism to reset various global structures (#4007)

This commit is contained in:
Dustin Spicuzza
2022-02-10 01:14:12 -05:00
committed by GitHub
parent 4e3cc25012
commit 74de97eeca
4 changed files with 51 additions and 6 deletions

View File

@@ -60,11 +60,24 @@ Component& SendableRegistryInst::GetOrAdd(void* sendable,
return *components[compUid - 1];
}
static SendableRegistryInst& GetInstance() {
static SendableRegistryInst instance;
static std::unique_ptr<SendableRegistryInst>& GetInstanceHolder() {
static std::unique_ptr<SendableRegistryInst> instance =
std::make_unique<SendableRegistryInst>();
return instance;
}
static SendableRegistryInst& GetInstance() {
return *GetInstanceHolder();
}
#ifndef __FRC_ROBORIO__
namespace wpi::impl {
void ResetSendableRegistry() {
std::make_unique<SendableRegistryInst>().swap(GetInstanceHolder());
}
} // namespace wpi::impl
#endif
void SendableRegistry::SetLiveWindowBuilderFactory(
std::function<std::unique_ptr<SendableBuilder>()> factory) {
GetInstance().liveWindowFactory = std::move(factory);