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#include <stddef.h> 10 11#include "base/macros.h" 12 13namespace base { 14namespace win { 15 16// Like ScopedHandle except for HGLOBAL. 17template<class T> 18class 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