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