mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-25 06:46:09 +03:00
53 lines
983 B
C
53 lines
983 B
C
|
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
||
|
// 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>
|
||
|
|
||
|
#include "base/macros.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() { 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_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(ScopedHGlobal);
|
||
|
};
|
||
|
|
||
|
} // namespace win
|
||
|
} // namespace base
|
||
|
|
||
|
#endif // BASE_WIN_SCOPED_HGLOBAL_H_
|