| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/scoped_variant_win.h" | 5 #include "base/scoped_variant_win.h" |
| 6 #include "base/logging.h" | 6 #include "base/logging.h" |
| 7 | 7 |
| 8 // Global, const instance of an empty variant. | 8 // Global, const instance of an empty variant. |
| 9 const VARIANT ScopedVariant::kEmptyVariant = { VT_EMPTY }; | 9 const VARIANT ScopedVariant::kEmptyVariant = { VT_EMPTY }; |
| 10 | 10 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 ScopedVariant::ScopedVariant(const wchar_t* str, UINT length) { | 21 ScopedVariant::ScopedVariant(const wchar_t* str, UINT length) { |
| 22 var_.vt = VT_BSTR; | 22 var_.vt = VT_BSTR; |
| 23 var_.bstrVal = ::SysAllocStringLen(str, length); | 23 var_.bstrVal = ::SysAllocStringLen(str, length); |
| 24 } | 24 } |
| 25 | 25 |
| 26 ScopedVariant::ScopedVariant(int value, VARTYPE vt) { | 26 ScopedVariant::ScopedVariant(int value, VARTYPE vt) { |
| 27 var_.vt = vt; | 27 var_.vt = vt; |
| 28 var_.lVal = value; | 28 var_.lVal = value; |
| 29 } | 29 } |
| 30 | 30 |
| 31 ScopedVariant::ScopedVariant(double value, VARTYPE vt) { |
| 32 DCHECK(vt == VT_R8 || vt == VT_DATE); |
| 33 var_.vt = vt; |
| 34 var_.dblVal = value; |
| 35 } |
| 36 |
| 31 ScopedVariant::ScopedVariant(IDispatch* dispatch) { | 37 ScopedVariant::ScopedVariant(IDispatch* dispatch) { |
| 32 var_.vt = VT_EMPTY; | 38 var_.vt = VT_EMPTY; |
| 33 Set(dispatch); | 39 Set(dispatch); |
| 34 } | 40 } |
| 35 | 41 |
| 36 ScopedVariant::ScopedVariant(IUnknown* unknown) { | 42 ScopedVariant::ScopedVariant(IUnknown* unknown) { |
| 37 var_.vt = VT_EMPTY; | 43 var_.vt = VT_EMPTY; |
| 38 Set(unknown); | 44 Set(unknown); |
| 39 } | 45 } |
| 40 | 46 |
| 47 ScopedVariant::ScopedVariant(SAFEARRAY* safearray) { |
| 48 var_.vt = VT_EMPTY; |
| 49 Set(safearray); |
| 50 } |
| 51 |
| 41 ScopedVariant::ScopedVariant(const VARIANT& var) { | 52 ScopedVariant::ScopedVariant(const VARIANT& var) { |
| 42 var_.vt = VT_EMPTY; | 53 var_.vt = VT_EMPTY; |
| 43 Set(var); | 54 Set(var); |
| 44 } | 55 } |
| 45 | 56 |
| 46 void ScopedVariant::Reset(const VARIANT& var) { | 57 void ScopedVariant::Reset(const VARIANT& var) { |
| 47 if (&var != &var_) { | 58 if (&var != &var_) { |
| 48 ::VariantClear(&var_); | 59 ::VariantClear(&var_); |
| 49 var_ = var; | 60 var_ = var; |
| 50 } | 61 } |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 leakable = true; | 261 leakable = true; |
| 251 break; | 262 break; |
| 252 } | 263 } |
| 253 | 264 |
| 254 if (!leakable && (vt & VT_ARRAY) != 0) { | 265 if (!leakable && (vt & VT_ARRAY) != 0) { |
| 255 leakable = true; | 266 leakable = true; |
| 256 } | 267 } |
| 257 | 268 |
| 258 return leakable; | 269 return leakable; |
| 259 } | 270 } |
| OLD | NEW |