53 lines
996 B
C++
53 lines
996 B
C++
// Copyright 2010 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef BASE_WIN_SCOPED_HGLOBAL_H_
|
|
#define BASE_WIN_SCOPED_HGLOBAL_H_
|
|
|
|
#include <windows.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
namespace base {
|
|
namespace win {
|
|
|
|
// Like ScopedHandle except for HGLOBAL.
|
|
template <class T>
|
|
class ScopedHGlobal {
|
|
public:
|
|
explicit ScopedHGlobal(HGLOBAL glob) : glob_(glob) {
|
|
data_ = static_cast<T>(GlobalLock(glob_));
|
|
}
|
|
|
|
ScopedHGlobal(const ScopedHGlobal&) = delete;
|
|
ScopedHGlobal& operator=(const ScopedHGlobal&) = delete;
|
|
|
|
~ScopedHGlobal() { GlobalUnlock(glob_); }
|
|
|
|
T get() { return data_; }
|
|
|
|
size_t Size() const { return GlobalSize(glob_); }
|
|
|
|
T operator->() const {
|
|
assert(data_ != 0);
|
|
return data_;
|
|
}
|
|
|
|
T release() {
|
|
T data = data_;
|
|
data_ = NULL;
|
|
return data;
|
|
}
|
|
|
|
private:
|
|
HGLOBAL glob_;
|
|
|
|
T data_;
|
|
};
|
|
|
|
} // namespace win
|
|
} // namespace base
|
|
|
|
#endif // BASE_WIN_SCOPED_HGLOBAL_H_
|