Merge pull request #10193 from mskvortsov/ryujit-arm32-fix-struct
[platform/upstream/coreclr.git] / src / debug / di / classfactory.h
1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 //*****************************************************************************
5 // ClassFactory.h
6 // 
7
8 //
9 // Class factories are used by the pluming in COM to activate new objects.  
10 // This module contains the class factory code to instantiate the debugger
11 // objects described in RSPriv.h.
12 //
13 //*****************************************************************************
14 #ifndef __ClassFactory__h__
15 #define __ClassFactory__h__
16
17 #include "rspriv.h"
18
19
20 // This typedef is for a function which will create a new instance of an object.
21 typedef HRESULT (__stdcall * PFN_CREATE_OBJ)(REFIID riid, void **ppvObject);
22
23
24 //*****************************************************************************
25 // One class factory object satifies all of our clsid's, to reduce overall 
26 // code bloat.
27 //*****************************************************************************
28 class CClassFactory :
29         public IClassFactory
30 {
31         CClassFactory() { }                                             // Can't use without data.
32         
33 public:
34         CClassFactory(PFN_CREATE_OBJ pfnCreateObject)
35                 : m_cRef(1), m_pfnCreateObject(pfnCreateObject)
36         { }
37
38         virtual ~CClassFactory() {}
39         
40         //
41         // IUnknown methods.
42         //
43
44     virtual HRESULT STDMETHODCALLTYPE QueryInterface( 
45         REFIID          riid,
46         void            **ppvObject);
47     
48     virtual ULONG STDMETHODCALLTYPE AddRef()
49         {
50                 return (InterlockedIncrement(&m_cRef));
51         }
52     
53     virtual ULONG STDMETHODCALLTYPE Release()
54         {
55                 LONG cRef = InterlockedDecrement(&m_cRef);
56                 if (cRef <= 0)
57                         delete this;
58                 return (cRef);
59         }
60
61
62         //
63         // IClassFactory methods.
64         //
65
66     virtual HRESULT STDMETHODCALLTYPE CreateInstance( 
67         IUnknown        *pUnkOuter,
68         REFIID          riid,
69         void            **ppvObject);
70     
71     virtual HRESULT STDMETHODCALLTYPE LockServer( 
72         BOOL            fLock);
73
74
75 private:
76     LONG        m_cRef;                     // Reference count.
77     PFN_CREATE_OBJ m_pfnCreateObject;       // Creation function for an instance.
78 };
79
80
81
82 #endif // __ClassFactory__h__