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