OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef BASE_WIN_SCOPED_HGLOBAL_H_ | 5 #ifndef BASE_WIN_SCOPED_HGLOBAL_H_ |
6 #define BASE_WIN_SCOPED_HGLOBAL_H_ | 6 #define BASE_WIN_SCOPED_HGLOBAL_H_ |
7 | 7 |
8 #include <windows.h> | 8 #include <windows.h> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 | 11 |
12 namespace base { | 12 namespace base { |
13 namespace win { | 13 namespace win { |
14 | 14 |
15 // Like ScopedHandle except for HGLOBAL. | 15 // Like ScopedHandle except for HGLOBAL. |
16 template<class T> | 16 template<class T> |
17 class ScopedHGlobal { | 17 class ScopedHGlobal { |
18 public: | 18 public: |
19 explicit ScopedHGlobal(HGLOBAL glob) : glob_(glob) { | 19 explicit ScopedHGlobal(HGLOBAL glob) : glob_(glob) { |
20 data_ = static_cast<T*>(GlobalLock(glob_)); | 20 data_ = static_cast<T>(GlobalLock(glob_)); |
21 } | 21 } |
22 ~ScopedHGlobal() { | 22 ~ScopedHGlobal() { |
23 GlobalUnlock(glob_); | 23 GlobalUnlock(glob_); |
24 } | 24 } |
25 | 25 |
26 T* get() { return data_; } | 26 T get() { return data_; } |
27 | 27 |
28 size_t Size() const { return GlobalSize(glob_); } | 28 size_t Size() const { return GlobalSize(glob_); } |
29 | 29 |
30 T* operator->() const { | 30 T operator->() const { |
31 assert(data_ != 0); | 31 assert(data_ != 0); |
32 return data_; | 32 return data_; |
33 } | 33 } |
34 | 34 |
35 T* release() { | 35 T release() { |
36 T* data = data_; | 36 T data = data_; |
37 data_ = NULL; | 37 data_ = NULL; |
38 return data; | 38 return data; |
39 } | 39 } |
40 | 40 |
41 private: | 41 private: |
42 HGLOBAL glob_; | 42 HGLOBAL glob_; |
43 | 43 |
44 T* data_; | 44 T data_; |
45 | 45 |
46 DISALLOW_COPY_AND_ASSIGN(ScopedHGlobal); | 46 DISALLOW_COPY_AND_ASSIGN(ScopedHGlobal); |
47 }; | 47 }; |
48 | 48 |
49 } // namespace win | 49 } // namespace win |
50 } // namespace base | 50 } // namespace base |
51 | 51 |
52 #endif // BASE_WIN_SCOPED_HGLOBAL_H_ | 52 #endif // BASE_WIN_SCOPED_HGLOBAL_H_ |
OLD | NEW |