1/* 2 * 3 * @APPLE_LICENSE_HEADER_START@ 4 * 5 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. 6 * 7 * This file contains Original Code and/or Modifications of Original Code 8 * as defined in and that are subject to the Apple Public Source License 9 * Version 2.0 (the 'License'). You may not use this file except in 10 * compliance with the License. Please obtain a copy of the License at 11 * http://www.opensource.apple.com/apsl/ and read it before using this 12 * file. 13 * 14 * The Original Code and all software distributed under the License are 15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 19 * Please see the License for the specific language governing rights and 20 * limitations under the License. 21 * 22 * @APPLE_LICENSE_HEADER_END@ 23 */ 24#ifndef _IOKIT_IOHIDIUNKNOWN_H 25#define _IOKIT_IOHIDIUNKNOWN_H 26 27#include <IOKit/IOCFPlugIn.h> 28 29__BEGIN_DECLS 30extern void *IOHIDLibFactory(CFAllocatorRef allocator, CFUUIDRef typeID); 31__END_DECLS 32 33class IOHIDIUnknown { 34 35public: 36 struct InterfaceMap { 37 IUnknownVTbl *pseudoVTable; 38 IOHIDIUnknown *obj; 39 }; 40 41private: 42 IOHIDIUnknown(IOHIDIUnknown &src); // Disable copy constructor 43 void operator =(IOHIDIUnknown &src); 44 IOHIDIUnknown() : refCount(1) { }; 45 46protected: 47 48 static int factoryRefCount; 49 static void factoryAddRef(); 50 static void factoryRelease(); 51 52 IOHIDIUnknown(void *unknownVTable); 53 virtual ~IOHIDIUnknown(); // Also virtualise destructor 54 55 static HRESULT genericQueryInterface(void *self, REFIID iid, void **ppv); 56 static UInt32 genericAddRef(void *self); 57 static UInt32 genericRelease(void *self); 58 59protected: 60 61 UInt32 refCount; 62 InterfaceMap iunknown; 63 64public: 65 virtual HRESULT queryInterface(REFIID iid, void **ppv) = 0; 66 virtual UInt32 addRef(); 67 virtual UInt32 release(); 68}; 69 70#endif /* !_IOKIT_IOHIDIUNKNOWN_H */ 71