summaryrefslogtreecommitdiff
path: root/shared/com_ptr.h
diff options
context:
space:
mode:
Diffstat (limited to 'shared/com_ptr.h')
-rw-r--r--shared/com_ptr.h125
1 files changed, 0 insertions, 125 deletions
diff --git a/shared/com_ptr.h b/shared/com_ptr.h
deleted file mode 100644
index be1776fd..00000000
--- a/shared/com_ptr.h
+++ /dev/null
@@ -1,125 +0,0 @@
-// **************************************************************************
-// * This file is part of the FreeFileSync project. It is distributed under *
-// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *
-// * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
-// **************************************************************************
-
-#ifndef SMART_COM_PTR_H
-#define SMART_COM_PTR_H
-
-#include <Objbase.h>
-#include <algorithm>
-
-namespace util
-{
-/*
-ComPtr: RAII class handling COM objects
-
-Example:
- --------
- ComPtr<IUPnPDeviceFinder> devFinder;
- if (FAILED(::CoCreateInstance(CLSID_UPnPDeviceFinder,
- NULL,
- CLSCTX_ALL,
- IID_PPV_ARGS(devFinder.init()))))
- return -1;
-
- ComPtr<IEnumUnknown> devEnum = com_dynamic_cast<IEnumUnknown>(devColl);
- if (!devEnum)
- return -1;
-*/
-
-template <class T>
-class ComPtr
-{
-public:
- ComPtr() : ptr(NULL) {}
-
- ComPtr(const ComPtr& rhs) : ptr(rhs.ptr) { if (ptr) ptr->AddRef(); }
-
- ComPtr& operator=(const ComPtr& rhs)
- {
- ComPtr(rhs).swap(*this);
- return *this;
- }
-
- ~ComPtr() { if (ptr) ptr->Release(); }
-
- T** init() //get pointer for use with ::CoCreateInstance()
- {
- ComPtr<T>().swap(*this);
- return &ptr;
- }
-
- T* get() const { return ptr; }
-
- T* release() //throw()
- {
- T* tmp = ptr;
- ptr = NULL;
- return tmp;
- }
-
- void swap(ComPtr& rhs) { std::swap(ptr, rhs.ptr); } //throw()
-
- T* operator->() const { return ptr; }
-
-private:
- T* ptr;
-
- struct ConversionToBool { int dummy; };
-public:
- //use member pointer as implicit conversion to bool (C++ Templates - Vandevoorde/Josuttis; chapter 20)
- operator int ConversionToBool::* () const { return ptr != NULL ? &ConversionToBool::dummy : NULL; }
-};
-
-
-template <class S, class T>
-ComPtr<S> com_dynamic_cast(const ComPtr<T>& other); //throw()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//################# Inline Implementation #############################
-
-//we cannot specialize std::swap() for a class template and are not allowed to overload it => offer swap in own namespace
-template <class T> inline
-void swap(util::ComPtr<T>& lhs, util::ComPtr<T>& rhs)
-{
- lhs.swap(rhs);
-}
-
-
-template <class S, class T> inline
-ComPtr<S> com_dynamic_cast(const ComPtr<T>& other) //throw()
-{
- ComPtr<S> outPtr;
- if (other)
- other->QueryInterface(IID_PPV_ARGS(outPtr.init()));
- return outPtr;
-}
-}
-
-
-#endif //SMART_COM_PTR_H \ No newline at end of file
bgstack15