| Index: base/dual_interface_switch.h
|
| diff --git a/base/dual_interface_switch.h b/base/dual_interface_switch.h
|
| deleted file mode 100644
|
| index 72dd933932a364f94b41f504e551040631376880..0000000000000000000000000000000000000000
|
| --- a/base/dual_interface_switch.h
|
| +++ /dev/null
|
| @@ -1,90 +0,0 @@
|
| -// Copyright 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.
|
| -// ========================================================================
|
| -
|
| -// This class allows for implementing two dual interfaces, ReadOnly being a
|
| -// read-only dual interface, and ReadWrite being a read-write dual interface.
|
| -// Based on the value returned from is_read_only(), the ReadOnly or the
|
| -// ReadWrite dual interface is exposed at runtime.
|
| -//
|
| -// An ATL class needs to
|
| -// (a) derive from DualInterfaceSwitch
|
| -//
|
| -// (b) implement the is_read_only() method. For instance:
|
| -// bool is_read_only() { return is_read_only_; }
|
| -//
|
| -// (c) add entries similar to below for the dual interfaces as well as IDispatch
|
| -// to the COM map:
|
| -// BEGIN_COM_MAP(AppData)
|
| -// COM_INTERFACE_ENTRY2(IUnknown, IAppData)
|
| -// COM_INTERFACE_ENTRY_FUNC(__uuidof(IAppDataReadOnly), 0, DualInterfaceQI)
|
| -// COM_INTERFACE_ENTRY_FUNC(__uuidof(IAppData), 0, DualInterfaceQI)
|
| -// COM_INTERFACE_ENTRY_FUNC(__uuidof(IDispatch), 0, DualInterfaceQI)
|
| -// END_COM_MAP()
|
| -
|
| -#ifndef OMAHA_BASE_DUAL_INTERFACE_SWITCH_H_
|
| -#define OMAHA_BASE_DUAL_INTERFACE_SWITCH_H_
|
| -
|
| -#include <windows.h>
|
| -#include <atlbase.h>
|
| -#include "base/basictypes.h"
|
| -#include "omaha/base/debug.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -template <class T, class ReadOnly, REFIID iid_read_only,
|
| - class ReadWrite, REFIID iid_read_write>
|
| -class ATL_NO_VTABLE DualInterfaceSwitch : public ReadOnly,
|
| - public ReadWrite {
|
| - protected:
|
| - // DualInterfaceQI gives out either the ReadOnly or ReadWrite interface
|
| - // pointer, based on the value of is_read_only() that class T implements.
|
| - // The signature of this function has to be
|
| - // HRESULT WINAPI func(void* pv, REFIID riid, LPVOID* ppv, DWORD dw);
|
| - // for it to work with COM_INTERFACE_ENTRY_FUNC.
|
| - static HRESULT WINAPI DualInterfaceQI(void* p,
|
| - REFIID riid,
|
| - LPVOID* v,
|
| - DWORD) {
|
| - // Ensure that ReadOnly and ReadWrite are derived from IDispatch.
|
| - ASSERT1(static_cast<IDispatch*>(reinterpret_cast<ReadOnly*>(1)));
|
| - ASSERT1(static_cast<IDispatch*>(reinterpret_cast<ReadWrite*>(1)));
|
| -
|
| - if (riid != iid_read_only &&
|
| - riid != iid_read_write &&
|
| - riid != __uuidof(IDispatch)) {
|
| - // Returning S_FALSE allows COM map processing to continue. Another entry
|
| - // in the COM map might match the interface requested.
|
| - return S_FALSE;
|
| - }
|
| -
|
| - T* t = reinterpret_cast<T*>(p);
|
| - if (t->is_read_only() && riid == iid_read_write) {
|
| - return S_FALSE;
|
| - }
|
| -
|
| - t->AddRef();
|
| - if (t->is_read_only() || riid == iid_read_only) {
|
| - *v = static_cast<ReadOnly*>(t);
|
| - return S_OK;
|
| - }
|
| -
|
| - *v = static_cast<ReadWrite*>(t);
|
| - return S_OK;
|
| - }
|
| -};
|
| -
|
| -} // namespace omaha
|
| -
|
| -#endif // OMAHA_BASE_DUAL_INTERFACE_SWITCH_H_
|
|
|