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 12namespace base { 13namespace win { 14 15// Like ScopedHandle except for HGLOBAL. 16template<class T> 17class 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