| // Copyright 2017 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_WIN_SCOPED_HSTRING_H_ |
| #define BASE_WIN_SCOPED_HSTRING_H_ |
| |
| #include <hstring.h> |
| |
| #include <string> |
| |
| #include "base/scoped_generic.h" |
| #include "base/strings/string_piece_forward.h" |
| |
| namespace base { |
| |
| namespace internal { |
| |
| // Scoped HSTRING class to maintain lifetime of HSTRINGs allocated with |
| // WindowsCreateString(). |
| struct BASE_EXPORT ScopedHStringTraits { |
| static HSTRING InvalidValue() { return nullptr; } |
| static void Free(HSTRING hstr); |
| }; |
| |
| } // namespace internal |
| |
| namespace win { |
| |
| // ScopedHString is a wrapper around an HSTRING. |
| // |
| // Example use: |
| // |
| // ScopedHString string = ScopedHString::Create(L"abc"); |
| // |
| // Also: |
| // |
| // HSTRING win_string; |
| // HRESULT hr = WindowsCreateString(..., &win_string); |
| // ScopedHString string(win_string); |
| // |
| class BASE_EXPORT ScopedHString |
| : public ScopedGeneric<HSTRING, base::internal::ScopedHStringTraits> { |
| public: |
| // Constructs a ScopedHString from an HSTRING, and takes ownership of |hstr|. |
| explicit ScopedHString(HSTRING hstr); |
| |
| static ScopedHString Create(WStringPiece str); |
| static ScopedHString Create(StringPiece str); |
| |
| // Returns a view into the memory buffer managed by the instance. The returned |
| // StringPiece is only valid during the lifetime of this ScopedHString |
| // instance. |
| WStringPiece Get() const; |
| |
| // Returns a copy of the instance as a UTF-8 string. |
| std::string GetAsUTF8() const; |
| }; |
| |
| } // namespace win |
| } // namespace base |
| |
| #endif // BASE_WIN_SCOPED_HSTRING_H_ |