Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Unified Diff: base/smart_handle.h

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/singleton.h ('k') | base/sta.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/smart_handle.h
diff --git a/base/smart_handle.h b/base/smart_handle.h
deleted file mode 100644
index 154fe046ef9f0d13e819f88def21f28848f4913d..0000000000000000000000000000000000000000
--- a/base/smart_handle.h
+++ /dev/null
@@ -1,240 +0,0 @@
-// Copyright 2004-2009 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// ========================================================================
-//
-// Classes for automatically closing handles.
-
-#ifndef OMAHA_COMMON_SMART_HANDLE_H_
-#define OMAHA_COMMON_SMART_HANDLE_H_
-
-#include <wincrypt.h>
-
-namespace omaha {
-
-/**
-* Base traits class for handles.
-* This base class provides default implementation for InvalidValue and IsValid
-* @param T The handle type to be wrapped.
-*/
-template<class T>
-class BaseHandleTraitsT {
- public:
- // Typedef that is used by this class and derived classes
- typedef T HandleType;
-
- // Returns the invalid handle value
- static HandleType InvalidValue() {
- return NULL;
- }
-
- // Returns true only if the given handle h is invalid
- static bool IsValid(const HandleType& h) {
- return h != InvalidValue();
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(BaseHandleTraitsT);
-};
-
-/**
-* Smart handle class.
-* Offers basic HANDLE functionality such as cast, attach/detach and automatic Close().
-*/
-template<class T, class Traits, class AlternateType = T>
-class HandleT {
- public:
- // Default constructor.
- HandleT() : h_(Traits::InvalidValue()) {
- }
-
- // Constructor that assumes ownership of the supplied handle
- explicit HandleT(T h) : h_(h) {
- }
-
- // Destructor calls @ref Close()
- ~HandleT() {
- Close();
- }
-
- // Assumes ownership of the supplied handle,
- // potentially closing an already held handle.
- void Attach(T h) {
- Close();
- h_ = h;
- }
-
- // Transfers ownership to the caller and sets the internal
- // state to InvalidValue().
- T Detach() {
- T h = h_;
- h_ = Traits::InvalidValue();
- return h;
- }
-
- // Handle accessor
- T handle() {
- return h_;
- }
-
- // An alternate cast for the handle.
- // This can be useful for GDI objects that are used
- // in functions that e.g. accept both HGDIOBJ and HBITMAP.
- AlternateType alt_type() {
- return reinterpret_cast<AlternateType>(h_);
- }
-
- // Accesses the contained handle
- operator T() {
- return h_;
- }
-
- T& receive() {
- ASSERT(!IsValid(), (L"Should only be used for out arguments"));
- return h_;
- }
-
- // @returns true only if the handle is valid as depicted
- // by the traits class.
- bool IsValid() {
- return Traits::IsValid(h_);
- }
-
- // Closes the handle
- void Close() {
- if (Traits::IsValid(h_)) {
- Traits::Close(h_);
- h_ = Traits::InvalidValue();
- }
- }
-
- protected:
- T h_;
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(HandleT);
-};
-
-
-/*
-* Traits class for a regular Win32 HANDLE.
-*/
-class HandleTraitsWin32Handle : public BaseHandleTraitsT<HANDLE> {
- public:
- // Calls FindClose to close the handle.
- static bool Close(HandleType h) {
- return (::CloseHandle(h) != false);
- }
-
- // Returns the invalid handle value
- static HandleType InvalidValue() {
- return NULL; // note that INVALID_HANDLE_VALUE is also an invalid handle
- }
-
- // Returns true only if the given handle h is invalid
- static bool IsValid(const HandleType& h) {
- return h != InvalidValue() && h != INVALID_HANDLE_VALUE;
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(HandleTraitsWin32Handle);
-};
-
-/*
-* Traits class for FindXXXFile handles.
-*/
-class HandleTraitsFindHandle : public BaseHandleTraitsT<HANDLE> {
- public:
- // Calls FindClose to close the handle.
- static bool Close(HandleType h) {
- return (::FindClose(h) != false);
- }
-
- // Returns the invalid handle value
- static HandleType InvalidValue() {
- return INVALID_HANDLE_VALUE;
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(HandleTraitsFindHandle);
-};
-
-/*
-* Traits for an HMENU.
-*/
-class HandleTraitsHMenu : public BaseHandleTraitsT<HMENU> {
- public:
- // Calls DestroyMenu to destroy the menu.
- static bool Close(HandleType h) {
- return (::DestroyMenu(h) != FALSE);
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(HandleTraitsHMenu);
-};
-
-/*
-* Traits for an HCRYPTKEY.
-*/
-class HandleTraitsHCryptKey : public BaseHandleTraitsT<HCRYPTKEY> {
- public:
- static bool Close(HandleType h) {
- return (::CryptDestroyKey(h) != FALSE);
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(HandleTraitsHCryptKey);
-};
-
-/*
-* Traits for an HCRYPTHASH.
-*/
-class HandleTraitsHCryptHash : public BaseHandleTraitsT<HCRYPTHASH> {
- public:
- static bool Close(HandleType h) {
- return (::CryptDestroyHash(h) != FALSE);
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(HandleTraitsHCryptHash);
-};
-
-/*
- * Traits for LoadLibrary/FreeLibrary.
- */
-class HandleTraitsLibrary : public BaseHandleTraitsT<HMODULE> {
- public:
- static bool Close(HandleType h) {
- return (::FreeLibrary(h) != FALSE);
- }
-
- private:
- DISALLOW_EVIL_CONSTRUCTORS(HandleTraitsLibrary);
-};
-
-
-/*
-* Win32 handle types. Add new ones here as you need them.
-* Note that GDI handle types should be kept in common/gdi_smart_ptr.h
-* rather than here.
-*/
-typedef HandleT<HANDLE, HandleTraitsWin32Handle> AutoHandle;
-typedef HandleT<HANDLE, HandleTraitsFindHandle> AutoFindHandle;
-typedef HandleT<HMENU, HandleTraitsHMenu> AutoHMenu;
-typedef HandleT<HCRYPTHASH, HandleTraitsHCryptHash> AutoHCryptHash;
-typedef HandleT<HCRYPTKEY, HandleTraitsHCryptKey> AutoHCryptKey;
-typedef HandleT<HINSTANCE, HandleTraitsLibrary> AutoLibrary;
-
-} // namespace omaha
-
-#endif // OMAHA_COMMON_SMART_HANDLE_H_
« no previous file with comments | « base/singleton.h ('k') | base/sta.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698