// Copyright 2021 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_LOCALALLOC_H_
#define BASE_WIN_SCOPED_LOCALALLOC_H_
#include <memory>
#include <utility>
#include "base/win/windows_types.h"
namespace base {
namespace win {
// unique_ptr deleter for LocalAlloc memory.
struct LocalAllocDeleter {
void operator()(void* ptr) const { ::LocalFree(ptr); }
};
template <typename T>
using ScopedLocalAllocTyped = std::unique_ptr<T, LocalAllocDeleter>;
using ScopedLocalAlloc = ScopedLocalAllocTyped<void>;
// Make a typed ScopedLocalAlloc class and clear the original pointer.
template <typename T>
ScopedLocalAllocTyped<T> TakeLocalAlloc(T*& ptr) {
return ScopedLocalAllocTyped<T>(std::exchange(ptr, nullptr));
}
} // namespace win
} // namespace base
#endif // BASE_WIN_SCOPED_LOCALALLOC_H_