1+ // ----------------------------------------------------------------------------
2+ //
3+ // 2015-12-16 dwayner Split Windows specific stuff from AutoResource.h
4+ //
5+ // ----------------------------------------------------------------------------
16#pragma once
27
38template <
49 typename ResourceType, // underlying type of the resource held onto (e.g. HGDIOBJ instead of HFONT)
510 typename ResourceReleaserSignature, // function prototype of the releasing function
611 ResourceReleaserSignature ResourceReleaser // address of function to release object
712>
8- struct HandleResourceTypePolicy : public DefaultResourceTypePolicy <ResourceType>
13+ struct AutoResourceHandlePolicy : public AutoResourceDefaultPolicy <ResourceType>
914{
1015 inline static void Release (ResourceType resource) noexcept
1116 {
@@ -19,7 +24,6 @@ struct HandleResourceTypePolicy : public DefaultResourceTypePolicy<ResourceType>
1924 static const bool AllowsMultipleReferences = false ;
2025};
2126
22-
2327// Releasing function for WaitHandleResource to pass to use with HandleResourceTypePolicy.
2428inline void WaitHandleUnregister (HANDLE handle) noexcept
2529{
@@ -29,28 +33,40 @@ inline void WaitHandleUnregister(HANDLE handle) noexcept
2933 }
3034}
3135
36+ using GdiDeviceContext = AutoResource<HDC, AutoResourceHandlePolicy<HDC, BOOL (WINAPI*)(HDC), &DeleteDC>, HDC>;
37+ using GdiPenHandle = AutoResource<HPEN, AutoResourceHandlePolicy<HGDIOBJ, BOOL (WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
38+ using GdiFontHandle = AutoResource<HFONT, AutoResourceHandlePolicy<HGDIOBJ, BOOL (WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
39+ using GdiBitmapHandle = AutoResource<HBITMAP, AutoResourceHandlePolicy<HGDIOBJ, BOOL (WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
40+ using GdiRegionHandle = AutoResource<HRGN, AutoResourceHandlePolicy<HGDIOBJ, BOOL (WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
41+ using GlobalMemoryResource = AutoResource<HGLOBAL, AutoResourceHandlePolicy<HGLOBAL, HGLOBAL (WINAPI*)(HGLOBAL), &GlobalFree>, HGLOBAL>;
42+ using LocalMemoryResource = AutoResource<HLOCAL, AutoResourceHandlePolicy<HLOCAL, HLOCAL (WINAPI*)(HLOCAL), &LocalFree>, HLOCAL>;
43+ using FileHandle = AutoResource<HANDLE, AutoResourceHandlePolicy<HANDLE, BOOL (WINAPI*)(HANDLE), &CloseHandle>, HANDLE>;
44+ using CstdioFileHandle = AutoResource<FILE*, AutoResourceHandlePolicy<FILE*, int (__cdecl *)(FILE*), &fclose>, FILE*>;
45+ using ScopedMemory = AutoResource<FILE*, AutoResourceHandlePolicy<void *, void (__cdecl *)(void *), &free>, FILE*>;
46+ using ModuleHandle = AutoResource<HMODULE, AutoResourceHandlePolicy<HMODULE, BOOL (WINAPI*)(HMODULE), &FreeLibrary>, HMODULE>;
47+ using WindowHandle = AutoResource<HWND, AutoResourceHandlePolicy<HWND, BOOL (WINAPI*)(HWND), &DestroyWindow>, HWND>;
48+ using MemoryViewResource = AutoResource<void *, AutoResourceHandlePolicy<void *, BOOL (WINAPI*)(void const *), &UnmapViewOfFile>, void *>;
49+ using MemorySectionResource = AutoResource<HANDLE, AutoResourceHandlePolicy<HANDLE, BOOL (WINAPI*)(HANDLE), &CloseHandle>, HANDLE>;
3250
33- using GdiDeviceContext = AutoResource<HDC, HandleResourceTypePolicy<HDC, BOOL(WINAPI*)(HDC), &DeleteDC> >;
34- using GdiPenHandle = AutoResource<HPEN, HandleResourceTypePolicy<HGDIOBJ, BOOL(WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
35- using GdiFontHandle = AutoResource<HFONT, HandleResourceTypePolicy<HGDIOBJ, BOOL(WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
36- using GdiBitmapHandle = AutoResource<HBITMAP, HandleResourceTypePolicy<HGDIOBJ, BOOL(WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
37- using GdiRegionHandle = AutoResource<HRGN, HandleResourceTypePolicy<HGDIOBJ, BOOL(WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
38- using GlobalMemoryResource = AutoResource<HGLOBAL, HandleResourceTypePolicy<HGLOBAL, HGLOBAL(WINAPI*)(HGLOBAL), &GlobalFree> >;
39- using LocalMemoryResource = AutoResource<HLOCAL, HandleResourceTypePolicy<HLOCAL, HLOCAL(WINAPI*)(HLOCAL), &LocalFree> >;
40- using FileHandle = AutoResource<HANDLE, HandleResourceTypePolicy<HANDLE, BOOL(WINAPI*)(HANDLE), &CloseHandle> >;
41- using CstdioFileHandle = AutoResource<FILE*, HandleResourceTypePolicy<FILE*, int (__cdecl *)(FILE*), &fclose> >;
42- using ScopedMemory = AutoResource<void *, HandleResourceTypePolicy<void *, void (__cdecl *)(void *), &free> >;
43- using ModuleHandle = AutoResource<HMODULE, HandleResourceTypePolicy<HMODULE, BOOL(WINAPI*)(HMODULE), &FreeLibrary> >;
44- using WindowHandle = AutoResource<HWND, HandleResourceTypePolicy<HWND, BOOL(WINAPI*)(HWND), &DestroyWindow> >;
45- using MemoryViewResource = AutoResource<void *, HandleResourceTypePolicy<void *, BOOL(WINAPI*)(void const *), &UnmapViewOfFile> >;
46- using MemorySectionResource = AutoResource<HANDLE, HandleResourceTypePolicy<HANDLE, BOOL(WINAPI*)(HANDLE), &CloseHandle> >;
47- using WaitHandleResource = AutoResource<HANDLE, HandleResourceTypePolicy<HANDLE, void (*)(HANDLE), &WaitHandleUnregister>>;
48-
51+ using GdiDeviceContext = AutoResource<HDC, AutoResourceHandlePolicy<HDC, BOOL (WINAPI*)(HDC), &DeleteDC>, HDC>;
52+ using GdiPenHandle = AutoResource<HPEN, AutoResourceHandlePolicy<HGDIOBJ, BOOL (WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
53+ using GdiFontHandle = AutoResource<HFONT, AutoResourceHandlePolicy<HGDIOBJ, BOOL (WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
54+ using GdiBitmapHandle = AutoResource<HBITMAP, AutoResourceHandlePolicy<HGDIOBJ, BOOL (WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
55+ using GdiRegionHandle = AutoResource<HRGN, AutoResourceHandlePolicy<HGDIOBJ, BOOL (WINAPI*)(HGDIOBJ), &DeleteObject>, HGDIOBJ>;
56+ using GlobalMemoryResource = AutoResource<HGLOBAL, AutoResourceHandlePolicy<HGLOBAL, HGLOBAL (WINAPI*)(HGLOBAL), &GlobalFree>, HGLOBAL>;
57+ using LocalMemoryResource = AutoResource<HLOCAL, AutoResourceHandlePolicy<HLOCAL, HLOCAL (WINAPI*)(HLOCAL), &LocalFree>, HLOCAL>;
58+ using FileHandle = AutoResource<HANDLE, AutoResourceHandlePolicy<HANDLE, BOOL (WINAPI*)(HANDLE), &CloseHandle>, HANDLE>;
59+ using CstdioFileHandle = AutoResource<FILE*, AutoResourceHandlePolicy<FILE*, int (__cdecl *)(FILE*), &fclose>, FILE*>;
60+ using ScopedMemory = AutoResource<FILE*, AutoResourceHandlePolicy<void *, void (__cdecl *)(void *), &free>, FILE*>;
61+ using ModuleHandle = AutoResource<HMODULE, AutoResourceHandlePolicy<HMODULE, BOOL (WINAPI*)(HMODULE), &FreeLibrary>, HMODULE>;
62+ using WindowHandle = AutoResource<HWND, AutoResourceHandlePolicy<HWND, BOOL (WINAPI*)(HWND), &DestroyWindow>, HWND>;
63+ using MemoryViewResource = AutoResource<void *, AutoResourceHandlePolicy<void *, BOOL (WINAPI*)(void const *), &UnmapViewOfFile>, void *>;
64+ using MemorySectionResource = AutoResource<HANDLE, AutoResourceHandlePolicy<HANDLE, BOOL (WINAPI*)(HANDLE), &CloseHandle>, HANDLE>;
4965
5066// //////////////////////////////////////
5167// Basic COM pointer.
5268
53- struct ComResourceTypePolicy : public DefaultResourceTypePolicy <IUnknown*>
69+ struct ComResourceTypePolicy : public AutoResourceDefaultPolicy <IUnknown*>
5470{
5571 inline static void Acquire (_Inout_opt_ IUnknown* resource) noexcept
5672 {
0 commit comments