From 04daecdd21e86e7556a9462380096530228cd6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Wed, 3 Aug 2022 21:57:27 +0200 Subject: Split common.h to util.h, wcharptr.h and win.h. --- c/wcharptr.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 c/wcharptr.h (limited to 'c/wcharptr.h') diff --git a/c/wcharptr.h b/c/wcharptr.h new file mode 100644 index 0000000..1f579b5 --- /dev/null +++ b/c/wcharptr.h @@ -0,0 +1,33 @@ +#ifndef WCHARPTR_H +#define WCHARPTR_H + +#include + +/* wchar_ptr: Simple wrapper for wide C strings. */ +struct wchar_ptr +{ + /* Named copy constructors (expensive). */ + static wchar_ptr from_narrow(const char* buf, int cp = CP_UTF8); + static wchar_ptr copy(const wchar_t* s); + + /* Non-explicit copies are disabled. */ + wchar_ptr(wchar_ptr& other) = delete; + wchar_ptr& operator=(wchar_ptr& other) = delete; + + wchar_ptr() noexcept; + ~wchar_ptr(); + operator wchar_t*() noexcept; + + wchar_ptr(wchar_t* s) noexcept; + wchar_ptr& operator=(wchar_t* s) noexcept; + + wchar_ptr(wchar_ptr&& other) noexcept; + wchar_ptr& operator=(wchar_ptr&& other) noexcept; + + /* Return pointer, releasing ownership. */ + wchar_t *release() noexcept; +private: + wchar_t* m_p = nullptr; +}; + +#endif -- cgit v1.2.3