diff --git a/include/cameraserver_cpp.h b/include/cameraserver_cpp.h index 7caf5d8373..7691c42b91 100644 --- a/include/cameraserver_cpp.h +++ b/include/cameraserver_cpp.h @@ -14,6 +14,7 @@ #include #include +#include "llvm/ArrayRef.h" #include "llvm/SmallVector.h" #include "llvm/StringRef.h" @@ -50,8 +51,9 @@ struct USBCameraInfo { CS_PropertyType GetPropertyType(CS_Property property, CS_Status* status); std::string GetPropertyName(CS_Property property, CS_Status* status); -void GetPropertyName(CS_Property property, llvm::SmallVectorImpl& name, - CS_Status* status); +llvm::StringRef GetPropertyName(CS_Property property, + llvm::SmallVectorImpl& buf, + CS_Status* status); bool GetBooleanProperty(CS_Property property, CS_Status* status); void SetBooleanProperty(CS_Property property, bool value, CS_Status* status); double GetDoubleProperty(CS_Property property, CS_Status* status); @@ -59,8 +61,9 @@ void SetDoubleProperty(CS_Property property, double value, CS_Status* status); double GetDoublePropertyMin(CS_Property property, CS_Status* status); double GetDoublePropertyMax(CS_Property property, CS_Status* status); std::string GetStringProperty(CS_Property property, CS_Status* status); -void GetStringProperty(CS_Property property, llvm::SmallVectorImpl& value, - CS_Status* status); +llvm::StringRef GetStringProperty(CS_Property property, + llvm::SmallVectorImpl& buf, + CS_Status* status); void SetStringProperty(CS_Property property, llvm::StringRef value, CS_Status* status); int GetEnumProperty(CS_Property property, CS_Status* status); @@ -83,19 +86,21 @@ CS_Source CreateCvSource(llvm::StringRef name, int numChannels, // Source Functions // std::string GetSourceName(CS_Source source, CS_Status* status); -void GetSourceName(CS_Source source, llvm::SmallVectorImpl& name, - CS_Status* status); +llvm::StringRef GetSourceName(CS_Source source, + llvm::SmallVectorImpl& buf, + CS_Status* status); std::string GetSourceDescription(CS_Source source, CS_Status* status); -void GetSourceDescription(CS_Source source, llvm::SmallVectorImpl& desc, - CS_Status* status); +llvm::StringRef GetSourceDescription(CS_Source source, + llvm::SmallVectorImpl& buf, + CS_Status* status); uint64_t GetSourceLastFrameTime(CS_Source source, CS_Status* status); int GetSourceNumChannels(CS_Source source, CS_Status* status); bool IsSourceConnected(CS_Source source, CS_Status* status); CS_Property GetSourceProperty(CS_Source source, llvm::StringRef name, CS_Status* status); -void EnumerateSourceProperties(CS_Source source, - llvm::SmallVectorImpl& properties, - CS_Status* status); +llvm::ArrayRef EnumerateSourceProperties( + CS_Source source, llvm::SmallVectorImpl& vec, + CS_Status* status); CS_Source CopySource(CS_Source source, CS_Status* status); void ReleaseSource(CS_Source source, CS_Status* status); @@ -133,11 +138,12 @@ CS_Sink CreateCvSinkCallback(llvm::StringRef name, // Sink Functions // std::string GetSinkName(CS_Sink sink, CS_Status* status); -void GetSinkName(CS_Sink sink, llvm::SmallVectorImpl& name, - CS_Status* status); +llvm::StringRef GetSinkName(CS_Sink sink, llvm::SmallVectorImpl& buf, + CS_Status* status); std::string GetSinkDescription(CS_Sink sink, CS_Status* status); -void GetSinkDescription(CS_Sink sink, llvm::SmallVectorImpl& desc, - CS_Status* status); +llvm::StringRef GetSinkDescription(CS_Sink sink, + llvm::SmallVectorImpl& buf, + CS_Status* status); void SetSinkSource(CS_Sink sink, CS_Source source, CS_Status* status); CS_Property GetSinkSourceProperty(CS_Sink sink, llvm::StringRef name, CS_Status* status); @@ -157,8 +163,8 @@ uint64_t SinkWaitForFrame(CS_Sink sink, CS_Status* status); bool GetSinkImage(CS_Sink sink, int channel, cv::Mat* image, CS_Status* status); uint64_t GrabSinkFrame(CS_Sink sink, cv::Mat* image, CS_Status* status); std::string GetSinkError(CS_Sink sink, CS_Status* status); -void GetSinkError(CS_Sink sink, llvm::SmallVectorImpl& msg, - CS_Status* status); +llvm::StringRef GetSinkError(CS_Sink sink, llvm::SmallVectorImpl& buf, + CS_Status* status); void SetSinkEnabled(CS_Sink sink, bool enabled, CS_Status* status); // @@ -182,10 +188,10 @@ void RemoveSinkListener(CS_Listener handle, CS_Status* status); // std::vector EnumerateUSBCameras(CS_Status* status); -void EnumerateSourceHandles(llvm::SmallVectorImpl& handles, - CS_Status* status); -void EnumerateSinkHandles(llvm::SmallVectorImpl& handles, - CS_Status* status); +llvm::ArrayRef EnumerateSourceHandles( + llvm::SmallVectorImpl& vec, CS_Status* status); +llvm::ArrayRef EnumerateSinkHandles( + llvm::SmallVectorImpl& vec, CS_Status* status); } // namespace cs diff --git a/include/cameraserver_oo.h b/include/cameraserver_oo.h index f81370fc58..93eaf6fe57 100644 --- a/include/cameraserver_oo.h +++ b/include/cameraserver_oo.h @@ -63,7 +63,7 @@ class VideoProperty { // String-specific functions std::string GetString() const; - void GetString(llvm::SmallVectorImpl& value) const; + llvm::StringRef GetString(llvm::SmallVectorImpl& buf) const; void SetString(llvm::StringRef value); // Enum-specific functions diff --git a/include/cameraserver_oo.inl b/include/cameraserver_oo.inl index 55a6c7fee2..66aef29e40 100644 --- a/include/cameraserver_oo.inl +++ b/include/cameraserver_oo.inl @@ -50,9 +50,10 @@ inline std::string VideoProperty::GetString() const { return GetStringProperty(m_handle, &m_status); } -inline void VideoProperty::GetString(llvm::SmallVectorImpl& value) const { +inline llvm::StringRef VideoProperty::GetString( + llvm::SmallVectorImpl& buf) const { m_status = 0; - GetStringProperty(m_handle, value, &m_status); + return GetStringProperty(m_handle, buf, &m_status); } inline void VideoProperty::SetString(llvm::StringRef value) { diff --git a/java/lib/CameraServerJNI.cpp b/java/lib/CameraServerJNI.cpp index 2e3c365d63..21acad92e9 100644 --- a/java/lib/CameraServerJNI.cpp +++ b/java/lib/CameraServerJNI.cpp @@ -99,8 +99,8 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_getPropertyN (JNIEnv *env, jclass, jint property) { CS_Status status; - llvm::SmallString<128> str; - cs::GetPropertyName(property, str, &status); + llvm::SmallString<128> buf; + auto str = cs::GetPropertyName(property, buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJString(env, str); } @@ -196,8 +196,8 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_getStringPro (JNIEnv *env, jclass, jint property) { CS_Status status; - llvm::SmallString<128> str; - cs::GetStringProperty(property, str, &status); + llvm::SmallString<128> buf; + auto str = cs::GetStringProperty(property, buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJString(env, str); } @@ -323,8 +323,8 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_getSourceNam (JNIEnv *env, jclass, jint source) { CS_Status status; - llvm::SmallString<128> str; - cs::GetSourceName(source, str, &status); + llvm::SmallString<128> buf; + auto str = cs::GetSourceName(source, buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJString(env, str); } @@ -338,8 +338,8 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_getSourceDes (JNIEnv *env, jclass, jint source) { CS_Status status; - llvm::SmallString<128> str; - cs::GetSourceDescription(source, str, &status); + llvm::SmallString<128> buf; + auto str = cs::GetSourceDescription(source, buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJString(env, str); } @@ -409,8 +409,8 @@ JNIEXPORT jintArray JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_enumerateS (JNIEnv *env, jclass, jint source) { CS_Status status; - llvm::SmallVector arr; - cs::EnumerateSourceProperties(source, arr, &status); + llvm::SmallVector buf; + auto arr = cs::EnumerateSourceProperties(source, buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJIntArray(env, arr); } @@ -562,8 +562,8 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_getSinkName (JNIEnv *env, jclass, jint sink) { CS_Status status; - llvm::SmallString<128> str; - cs::GetSinkName(sink, str, &status); + llvm::SmallString<128> buf; + auto str = cs::GetSinkName(sink, buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJString(env, str); } @@ -577,8 +577,8 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_getSinkDescr (JNIEnv *env, jclass, jint sink) { CS_Status status; - llvm::SmallString<128> str; - cs::GetSinkDescription(sink, str, &status); + llvm::SmallString<128> buf; + auto str = cs::GetSinkDescription(sink, buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJString(env, str); } @@ -687,8 +687,8 @@ JNIEXPORT jstring JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_getSinkError (JNIEnv *env, jclass, jint sink) { CS_Status status; - llvm::SmallString<128> str; - cs::GetSinkError(sink, str, &status); + llvm::SmallString<128> buf; + auto str = cs::GetSinkError(sink, buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJString(env, str); } @@ -762,8 +762,8 @@ JNIEXPORT jintArray JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_enumerateS (JNIEnv *env, jclass) { CS_Status status; - llvm::SmallVector arr; - cs::EnumerateSourceHandles(arr, &status); + llvm::SmallVector buf; + auto arr = cs::EnumerateSourceHandles(buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJIntArray(env, arr); } @@ -777,8 +777,8 @@ JNIEXPORT jintArray JNICALL Java_edu_wpi_cameraserver_CameraServerJNI_enumerateS (JNIEnv *env, jclass) { CS_Status status; - llvm::SmallVector arr; - cs::EnumerateSinkHandles(arr, &status); + llvm::SmallVector buf; + auto arr = cs::EnumerateSinkHandles(buf, &status); if (!CheckStatus(env, status)) return nullptr; return MakeJIntArray(env, arr); } diff --git a/src/HTTPSinkImpl.cpp b/src/HTTPSinkImpl.cpp index 75dd4129c0..1df78435c3 100644 --- a/src/HTTPSinkImpl.cpp +++ b/src/HTTPSinkImpl.cpp @@ -258,9 +258,9 @@ HTTPSinkImpl::HTTPSinkImpl(llvm::StringRef name, llvm::StringRef description, HTTPSinkImpl::~HTTPSinkImpl() { Stop(); } -void HTTPSinkImpl::GetDescription(llvm::SmallVectorImpl& desc) const { - llvm::raw_svector_ostream oss{desc}; - oss << m_description; +llvm::StringRef HTTPSinkImpl::GetDescription( + llvm::SmallVectorImpl& buf) const { + return m_description; } void HTTPSinkImpl::Stop() { diff --git a/src/HTTPSinkImpl.h b/src/HTTPSinkImpl.h index 1f7ca94003..ab9e995e01 100644 --- a/src/HTTPSinkImpl.h +++ b/src/HTTPSinkImpl.h @@ -35,7 +35,8 @@ class HTTPSinkImpl : public SinkImpl { std::unique_ptr acceptor); ~HTTPSinkImpl() override; - void GetDescription(llvm::SmallVectorImpl& desc) const override; + llvm::StringRef GetDescription( + llvm::SmallVectorImpl& buf) const override; void SetSourceChannel(int channel) { m_sourceChannel.store(channel); } diff --git a/src/SinkImpl.h b/src/SinkImpl.h index 77dd34cfad..716be983cd 100644 --- a/src/SinkImpl.h +++ b/src/SinkImpl.h @@ -28,7 +28,8 @@ class SinkImpl { SinkImpl& operator=(const SinkImpl& queue) = delete; llvm::StringRef GetName() const { return m_name; } - virtual void GetDescription(llvm::SmallVectorImpl& desc) const = 0; + virtual llvm::StringRef GetDescription( + llvm::SmallVectorImpl& buf) const = 0; void Enable() { std::lock_guard lock(m_mutex); diff --git a/src/SourceImpl.h b/src/SourceImpl.h index c44b582e75..cade571e50 100644 --- a/src/SourceImpl.h +++ b/src/SourceImpl.h @@ -15,6 +15,7 @@ #include #include +#include "llvm/ArrayRef.h" #include "llvm/StringRef.h" #include "cameraserver_c.h" #include "Frame.h" @@ -31,7 +32,8 @@ class SourceImpl { SourceImpl& operator=(const SourceImpl& queue) = delete; llvm::StringRef GetName() const { return m_name; } - virtual void GetDescription(llvm::SmallVectorImpl& desc) const = 0; + virtual llvm::StringRef GetDescription( + llvm::SmallVectorImpl& buf) const = 0; int GetNumChannels() const { return m_numChannels; } bool IsConnected() const { return m_connected; } @@ -78,19 +80,19 @@ class SourceImpl { // Property functions virtual int GetProperty(llvm::StringRef name) const = 0; - virtual void EnumerateProperties( - llvm::SmallVectorImpl& properties) const = 0; + virtual llvm::ArrayRef EnumerateProperties( + llvm::SmallVectorImpl& vec) const = 0; virtual CS_PropertyType GetPropertyType(int property) const = 0; - virtual void GetPropertyName(int property, - llvm::SmallVectorImpl& name) const = 0; + virtual llvm::StringRef GetPropertyName( + int property, llvm::SmallVectorImpl& buf) const = 0; virtual bool GetBooleanProperty(int property) const = 0; virtual void SetBooleanProperty(int property, bool value) = 0; virtual double GetDoubleProperty(int property) const = 0; virtual void SetDoubleProperty(int property, double value) = 0; virtual double GetPropertyMin(int property) const = 0; virtual double GetPropertyMax(int property) const = 0; - virtual void GetStringProperty(int property, - llvm::SmallVectorImpl& value) const = 0; + virtual llvm::StringRef GetStringProperty( + int property, llvm::SmallVectorImpl& buf) const = 0; virtual void SetStringProperty(int property, llvm::StringRef value) = 0; virtual int GetEnumProperty(int property) const = 0; virtual void SetEnumProperty(int property, int value) = 0; diff --git a/src/UnlimitedHandleResource.h b/src/UnlimitedHandleResource.h index 403998f5e1..219bbe618a 100644 --- a/src/UnlimitedHandleResource.h +++ b/src/UnlimitedHandleResource.h @@ -12,6 +12,7 @@ #include #include +#include "llvm/ArrayRef.h" #include "llvm/SmallVector.h" #include "support/atomic_static.h" @@ -52,7 +53,7 @@ class UnlimitedHandleResource { void Free(THandle handle); template - void GetAll(llvm::SmallVectorImpl& handles); + llvm::ArrayRef GetAll(llvm::SmallVectorImpl& vec); private: THandle MakeHandle(size_t i) { @@ -124,13 +125,15 @@ void UnlimitedHandleResource::Free( template template -void UnlimitedHandleResource::GetAll( - llvm::SmallVectorImpl& handles) { +llvm::ArrayRef +UnlimitedHandleResource::GetAll( + llvm::SmallVectorImpl& vec) { std::lock_guard sync(m_handleMutex); size_t i; for (i = 0; i < m_structures.size(); i++) { - if (m_structures[i] != nullptr) handles.push_back(MakeHandle(i)); + if (m_structures[i] != nullptr) vec.push_back(MakeHandle(i)); } + return vec; } template str; - cs::GetPropertyName(property, str, status); + llvm::SmallString<128> buf; + auto str = cs::GetPropertyName(property, buf, status); if (*status != 0) return nullptr; return ConvertToC(str); } @@ -65,8 +65,8 @@ double CS_GetDoublePropertyMax(CS_Property property, CS_Status* status) { } char* CS_GetStringProperty(CS_Property property, CS_Status* status) { - llvm::SmallString<128> str; - cs::GetStringProperty(property, str, status); + llvm::SmallString<128> buf; + auto str = cs::GetStringProperty(property, buf, status); if (*status != 0) return nullptr; return ConvertToC(str); } @@ -114,15 +114,15 @@ CS_Source CS_CreateCvSource(const char* name, int numChannels, } char* CS_GetSourceName(CS_Source source, CS_Status* status) { - llvm::SmallString<128> str; - cs::GetSourceName(source, str, status); + llvm::SmallString<128> buf; + auto str = cs::GetSourceName(source, buf, status); if (*status != 0) return nullptr; return ConvertToC(str); } char* CS_GetSourceDescription(CS_Source source, CS_Status* status) { - llvm::SmallString<128> str; - cs::GetSourceDescription(source, str, status); + llvm::SmallString<128> buf; + auto str = cs::GetSourceDescription(source, buf, status); if (*status != 0) return nullptr; return ConvertToC(str); } @@ -146,8 +146,8 @@ CS_Property CS_GetSourceProperty(CS_Source source, const char* name, CS_Property* CS_EnumerateSourceProperties(CS_Source source, int* count, CS_Status* status) { - llvm::SmallVector vec; - cs::EnumerateSourceProperties(source, vec, status); + llvm::SmallVector buf; + auto vec = cs::EnumerateSourceProperties(source, buf, status); CS_Property* out = static_cast(std::malloc(vec.size() * sizeof(CS_Property))); *count = vec.size(); @@ -224,15 +224,15 @@ CS_Sink CS_CreateCvSinkCallback(const char* name, void* data, } char* CS_GetSinkName(CS_Sink sink, CS_Status* status) { - llvm::SmallString<128> str; - cs::GetSinkName(sink, str, status); + llvm::SmallString<128> buf; + auto str = cs::GetSinkName(sink, buf, status); if (*status != 0) return nullptr; return ConvertToC(str); } char* CS_GetSinkDescription(CS_Sink sink, CS_Status* status) { - llvm::SmallString<128> str; - cs::GetSinkDescription(sink, str, status); + llvm::SmallString<128> buf; + auto str = cs::GetSinkDescription(sink, buf, status); if (*status != 0) return nullptr; return ConvertToC(str); } @@ -273,8 +273,8 @@ uint64_t CS_GrabSinkFrame(CS_Sink sink, struct CvMat* image, } char* CS_GetSinkError(CS_Sink sink, CS_Status* status) { - llvm::SmallString<128> str; - cs::GetSinkError(sink, str, status); + llvm::SmallString<128> buf; + auto str = cs::GetSinkError(sink, buf, status); if (*status != 0) return nullptr; return ConvertToC(str); } @@ -349,8 +349,8 @@ void CS_FreeEnumeratedUSBCameras(CS_USBCameraInfo* cameras, int count) { } CS_Source* CS_EnumerateSources(int* count, CS_Status* status) { - llvm::SmallVector handles; - cs::EnumerateSourceHandles(handles, status); + llvm::SmallVector buf; + auto handles = cs::EnumerateSourceHandles(buf, status); CS_Source* sources = static_cast(std::malloc(handles.size() * sizeof(CS_Source))); *count = handles.size(); @@ -368,8 +368,8 @@ void CS_ReleaseEnumeratedSources(CS_Source* sources, int count) { } CS_Sink* CS_EnumerateSinks(int* count, CS_Status* status) { - llvm::SmallVector handles; - cs::EnumerateSinkHandles(handles, status); + llvm::SmallVector buf; + auto handles = cs::EnumerateSinkHandles(buf, status); CS_Sink* sinks = static_cast(std::malloc(handles.size() * sizeof(CS_Sink))); *count = handles.size(); diff --git a/src/cameraserver_cpp.cpp b/src/cameraserver_cpp.cpp index fd80c1cece..063f465e2e 100644 --- a/src/cameraserver_cpp.cpp +++ b/src/cameraserver_cpp.cpp @@ -55,12 +55,13 @@ std::string GetPropertyName(CS_Property property, CS_Status* status) { return name.str(); } -void GetPropertyName(CS_Property property, llvm::SmallVectorImpl& name, - CS_Status* status) { +llvm::StringRef GetPropertyName(CS_Property property, + llvm::SmallVectorImpl& buf, + CS_Status* status) { int propertyIndex; auto source = GetPropertySource(property, &propertyIndex, status); - if (!source) return; - source->GetPropertyName(propertyIndex, name); + if (!source) return llvm::StringRef{}; + return source->GetPropertyName(propertyIndex, buf); } bool GetBooleanProperty(CS_Property property, CS_Status* status) { @@ -114,12 +115,13 @@ std::string GetStringProperty(CS_Property property, CS_Status* status) { return value.str(); } -void GetStringProperty(CS_Property property, llvm::SmallVectorImpl& value, - CS_Status* status) { +llvm::StringRef GetStringProperty(CS_Property property, + llvm::SmallVectorImpl& buf, + CS_Status* status) { int propertyIndex; auto source = GetPropertySource(property, &propertyIndex, status); - if (!source) return; - source->GetStringProperty(propertyIndex, value); + if (!source) return llvm::StringRef{}; + return source->GetStringProperty(propertyIndex, buf); } void SetStringProperty(CS_Property property, llvm::StringRef value, @@ -188,36 +190,36 @@ std::string GetSourceName(CS_Source source, CS_Status* status) { return data->source->GetName(); } -void GetSourceName(CS_Source source, llvm::SmallVectorImpl& name, - CS_Status* status) { +llvm::StringRef GetSourceName(CS_Source source, + llvm::SmallVectorImpl& buf, + CS_Status* status) { auto data = Sources::GetInstance().Get(source); if (!data) { *status = CS_INVALID_HANDLE; - return; + return llvm::StringRef{}; } - auto str = data->source->GetName(); - name.append(str.begin(), str.end()); + return data->source->GetName(); } std::string GetSourceDescription(CS_Source source, CS_Status* status) { - llvm::SmallString<128> desc; auto data = Sources::GetInstance().Get(source); if (!data) { *status = CS_INVALID_HANDLE; return std::string{}; } - data->source->GetDescription(desc); - return desc.str(); + llvm::SmallString<128> buf; + return data->source->GetDescription(buf); } -void GetSourceDescription(CS_Source source, llvm::SmallVectorImpl& desc, - CS_Status* status) { +llvm::StringRef GetSourceDescription(CS_Source source, + llvm::SmallVectorImpl& buf, + CS_Status* status) { auto data = Sources::GetInstance().Get(source); if (!data) { *status = CS_INVALID_HANDLE; - return; + return llvm::StringRef{}; } - data->source->GetDescription(desc); + return data->source->GetDescription(buf); } uint64_t GetSourceLastFrameTime(CS_Source source, CS_Status* status) { @@ -257,10 +259,11 @@ CS_Property GetSourceProperty(CS_Source source, llvm::StringRef name, return Handle{source, property, Handle::kProperty}; } -void EnumerateSourceProperties(CS_Source source, - llvm::SmallVectorImpl& properties, - CS_Status* status) { +llvm::ArrayRef EnumerateSourceProperties( + CS_Source source, llvm::SmallVectorImpl& vec, + CS_Status* status) { // TODO + return llvm::ArrayRef{}; } CS_Source CopySource(CS_Source source, CS_Status* status) { @@ -358,36 +361,35 @@ std::string GetSinkName(CS_Sink sink, CS_Status* status) { return data->sink->GetName(); } -void GetSinkName(CS_Sink sink, llvm::SmallVectorImpl& name, - CS_Status* status) { +llvm::StringRef GetSinkName(CS_Sink sink, llvm::SmallVectorImpl& buf, + CS_Status* status) { auto data = Sinks::GetInstance().Get(sink); if (!data) { *status = CS_INVALID_HANDLE; - return; + return llvm::StringRef{}; } - auto str = data->sink->GetName(); - name.append(str.begin(), str.end()); + return data->sink->GetName(); } std::string GetSinkDescription(CS_Sink sink, CS_Status* status) { - llvm::SmallString<128> desc; auto data = Sinks::GetInstance().Get(sink); if (!data) { *status = CS_INVALID_HANDLE; return std::string{}; } - data->sink->GetDescription(desc); - return desc.str(); + llvm::SmallString<128> buf; + return data->sink->GetDescription(buf); } -void GetSinkDescription(CS_Sink sink, llvm::SmallVectorImpl& desc, - CS_Status* status) { +llvm::StringRef GetSinkDescription(CS_Sink sink, + llvm::SmallVectorImpl& buf, + CS_Status* status) { auto data = Sinks::GetInstance().Get(sink); if (!data) { *status = CS_INVALID_HANDLE; - return; + return llvm::StringRef{}; } - data->sink->GetDescription(desc); + return data->sink->GetDescription(buf); } void SetSinkSource(CS_Sink sink, CS_Source source, CS_Status* status) { @@ -464,12 +466,12 @@ uint64_t GrabSinkFrame(CS_Sink sink, cv::Mat* image, CS_Status* status) { } std::string GetSinkError(CS_Sink sink, CS_Status* status) { - return ""; // TODO + return std::string{}; // TODO } -void GetSinkError(CS_Sink sink, llvm::SmallVectorImpl& msg, - CS_Status* status) { - // TODO +llvm::StringRef GetSinkError(CS_Sink sink, llvm::SmallVectorImpl& buf, + CS_Status* status) { + return llvm::StringRef{}; // TODO } void SetSinkEnabled(CS_Sink sink, bool enabled, CS_Status* status) { @@ -509,14 +511,14 @@ std::vector EnumerateUSBCameras(CS_Status* status) { return std::vector{}; // TODO } -void EnumerateSourceHandles(llvm::SmallVectorImpl& handles, - CS_Status* status) { - Sources::GetInstance().GetAll(handles); +llvm::ArrayRef EnumerateSourceHandles( + llvm::SmallVectorImpl& vec, CS_Status* status) { + return Sources::GetInstance().GetAll(vec); } -void EnumerateSinkHandles(llvm::SmallVectorImpl& handles, - CS_Status* status) { - Sinks::GetInstance().GetAll(handles); +llvm::ArrayRef EnumerateSinkHandles( + llvm::SmallVectorImpl& vec, CS_Status* status) { + return Sinks::GetInstance().GetAll(vec); } } // namespace cs