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