mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
cscore: Refactor sink and source creation
Also make sources and sinks members of Instance private, with appropriate accessor functions.
This commit is contained in:
@@ -51,13 +51,16 @@ class Instance {
|
||||
|
||||
static Instance& GetInstance();
|
||||
|
||||
UnlimitedHandleResource<Handle, SourceData, Handle::kSource> sources;
|
||||
UnlimitedHandleResource<Handle, SinkData, Handle::kSink> sinks;
|
||||
|
||||
wpi::Logger logger;
|
||||
Notifier notifier;
|
||||
Telemetry telemetry;
|
||||
NetworkListener network_listener;
|
||||
|
||||
private:
|
||||
UnlimitedHandleResource<Handle, SourceData, Handle::kSource> m_sources;
|
||||
UnlimitedHandleResource<Handle, SinkData, Handle::kSink> m_sinks;
|
||||
|
||||
public:
|
||||
wpi::EventLoopRunner event_loop;
|
||||
|
||||
std::pair<CS_Sink, std::shared_ptr<SinkData>> FindSink(const SinkImpl& sink);
|
||||
@@ -66,6 +69,41 @@ class Instance {
|
||||
|
||||
void SetDefaultLogger();
|
||||
|
||||
std::shared_ptr<SourceData> GetSource(CS_Source handle) {
|
||||
return m_sources.Get(handle);
|
||||
}
|
||||
|
||||
std::shared_ptr<SinkData> GetSink(CS_Sink handle) {
|
||||
return m_sinks.Get(handle);
|
||||
}
|
||||
|
||||
CS_Source CreateSource(CS_SourceKind kind,
|
||||
std::shared_ptr<SourceImpl> source);
|
||||
|
||||
CS_Sink CreateSink(CS_SinkKind kind, std::shared_ptr<SinkImpl> sink);
|
||||
|
||||
void DestroySource(CS_Source handle);
|
||||
void DestroySink(CS_Sink handle);
|
||||
|
||||
wpi::ArrayRef<CS_Source> EnumerateSourceHandles(
|
||||
wpi::SmallVectorImpl<CS_Source>& vec) {
|
||||
return m_sources.GetAll(vec);
|
||||
}
|
||||
|
||||
wpi::ArrayRef<CS_Sink> EnumerateSinkHandles(
|
||||
wpi::SmallVectorImpl<CS_Sink>& vec) {
|
||||
return m_sinks.GetAll(vec);
|
||||
}
|
||||
|
||||
wpi::ArrayRef<CS_Sink> EnumerateSourceSinks(
|
||||
CS_Source source, wpi::SmallVectorImpl<CS_Sink>& vec) {
|
||||
vec.clear();
|
||||
m_sinks.ForEach([&](CS_Sink sinkHandle, const SinkData& data) {
|
||||
if (source == data.sourceHandle.load()) vec.push_back(sinkHandle);
|
||||
});
|
||||
return vec;
|
||||
}
|
||||
|
||||
private:
|
||||
Instance();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user