1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef BASE_WIN_SCOPED_PROPVARIANT_H_
6 #define BASE_WIN_SCOPED_PROPVARIANT_H_
10 #include "base/basictypes.h"
11 #include "base/logging.h"
16 // A PROPVARIANT that is automatically initialized and cleared upon respective
17 // construction and destruction of this class.
18 class ScopedPropVariant
{
21 PropVariantInit(&pv_
);
24 ~ScopedPropVariant() {
28 // Returns a pointer to the underlying PROPVARIANT for use as an out param in
30 PROPVARIANT
* Receive() {
31 DCHECK_EQ(pv_
.vt
, VT_EMPTY
);
35 // Clears the instance to prepare it for re-use (e.g., via Receive).
37 if (pv_
.vt
!= VT_EMPTY
) {
38 HRESULT result
= PropVariantClear(&pv_
);
39 DCHECK_EQ(result
, S_OK
);
43 const PROPVARIANT
& get() const { return pv_
; }
45 const PROPVARIANT
* operator&() const { return &pv_
; }
50 // Comparison operators for ScopedPropVariant are not supported at this point.
51 bool operator==(const ScopedPropVariant
&) const;
52 bool operator!=(const ScopedPropVariant
&) const;
53 DISALLOW_COPY_AND_ASSIGN(ScopedPropVariant
);
59 #endif // BASE_WIN_SCOPED_PROPVARIANT_H_