/*----------------------------------------------------------------------------*/ /* Copyright (c) FIRST 2016-2017. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ /*----------------------------------------------------------------------------*/ #ifndef NT_INSTANCEIMPL_H_ #define NT_INSTANCEIMPL_H_ #include #include #include #include "support/UidVector.h" #include "ConnectionNotifier.h" #include "Dispatcher.h" #include "DsClient.h" #include "EntryNotifier.h" #include "Log.h" #include "LoggerImpl.h" #include "RpcServer.h" #include "Storage.h" namespace nt { class InstanceImpl { public: explicit InstanceImpl(int inst); ~InstanceImpl(); // Instance repository static InstanceImpl* GetDefault(); static InstanceImpl* Get(int inst); static int GetDefaultIndex(); static int Alloc(); static void Destroy(int inst); LoggerImpl logger_impl; wpi::Logger logger; ConnectionNotifier connection_notifier; EntryNotifier entry_notifier; RpcServer rpc_server; Storage storage; Dispatcher dispatcher; DsClient ds_client; private: static int AllocImpl(); static std::atomic s_default; static std::atomic s_fast_instances[10]; static wpi::UidVector, 10> s_instances; static std::mutex s_mutex; }; } // namespace nt #endif // NT_INSTANCEIMPL_H_