vlc | branch: master | Hugo Beauzée-Luyssen <[email protected]> | Tue Mar 3 09:42:50 2020 +0100| [1b64ac0e2ea5662e2bff93021d926091965c9720] | committer: Hugo Beauzée-Luyssen
cxx helpers: Add an url helper > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1b64ac0e2ea5662e2bff93021d926091965c9720 --- include/vlc_cxx_helpers.hpp | 62 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/include/vlc_cxx_helpers.hpp b/include/vlc_cxx_helpers.hpp index 5c55ff01b3..0194e37a35 100644 --- a/include/vlc_cxx_helpers.hpp +++ b/include/vlc_cxx_helpers.hpp @@ -32,6 +32,8 @@ #include <memory> #include <utility> #include <type_traits> +#include <string> +#include <stdexcept> #ifdef VLC_THREADS_H_ // Ensure we can use vlc_sem_wait_i11e. We can't declare different versions @@ -397,6 +399,66 @@ private: #endif // VLC_THREADS_H_ +#ifdef VLC_URL_H + +class url : public vlc_url_t +{ +public: + class invalid : public std::runtime_error + { + public: + invalid( const char* url ) + : std::runtime_error( std::string{ "Invalid url: " } + url ) + { + } + }; + + url() + { + psz_buffer = nullptr; + psz_pathbuffer = nullptr; + psz_host = nullptr; + } + + url( const char* str ) + { + if ( vlc_UrlParse( this, str ) ) + throw invalid( str ); + } + + url( const std::string& str ) + : url( str.c_str() ) + { + } + + ~url() + { + vlc_UrlClean(this); + } + + url( const url& ) = delete; + url& operator=( const url& ) = delete; + + url( url&& u ) noexcept + : vlc_url_t( u ) + { + u.psz_buffer = nullptr; + u.psz_pathbuffer = nullptr; + u.psz_host = nullptr; + } + + url& operator=( url&& u ) noexcept + { + *(static_cast<vlc_url_t*>( this )) = u; + u.psz_buffer = nullptr; + u.psz_pathbuffer = nullptr; + u.psz_host = nullptr; + return *this; + } +}; + +#endif + } // namespace vlc #endif _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
