Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(266)

Side by Side Diff: chrome/common/classfactory.h

Issue 39206: NO CODE CHANGE. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/common/chrome_plugin_api.h ('k') | chrome/common/classfactory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // ClassFactory<class> 5 // ClassFactory<class>
6 // is a simple class factory object for the parameterized class. 6 // is a simple class factory object for the parameterized class.
7 // 7 //
8 #ifndef _CLASSFACTORY_H_ 8 #ifndef _CLASSFACTORY_H_
9 #define _CLASSFACTORY_H_ 9 #define _CLASSFACTORY_H_
10 10
11 #include <unknwn.h> 11 #include <unknwn.h>
12 12
13 // GenericClassFactory 13 // GenericClassFactory
14 // provides the basic COM plumbing to implement IClassFactory, and 14 // provides the basic COM plumbing to implement IClassFactory, and
15 // maintains a static count on the number of these objects in existence. 15 // maintains a static count on the number of these objects in existence.
16 // It remains for subclasses to implement CreateInstance. 16 // It remains for subclasses to implement CreateInstance.
17 class GenericClassFactory : public IClassFactory { 17 class GenericClassFactory : public IClassFactory {
18 public: 18 public:
19 GenericClassFactory(); 19 GenericClassFactory();
20 ~GenericClassFactory(); 20 ~GenericClassFactory();
21 21
22 //IUnknown methods 22 //IUnknown methods
23 STDMETHOD(QueryInterface)(REFIID iid, LPVOID* ppvObject); 23 STDMETHOD(QueryInterface)(REFIID iid, LPVOID* ppvObject);
24 STDMETHOD_(ULONG, AddRef)(); 24 STDMETHOD_(ULONG, AddRef)();
25 STDMETHOD_(ULONG, Release)(); 25 STDMETHOD_(ULONG, Release)();
26 26
27 //IClassFactory methods 27 //IClassFactory methods
28 STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppvObject) = 0; 28 STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid,
29 LPVOID* ppvObject) = 0;
29 STDMETHOD(LockServer)(BOOL fLock); 30 STDMETHOD(LockServer)(BOOL fLock);
30 31
31 // generally handy for DllUnloadNow -- count of existing descendant objects 32 // generally handy for DllUnloadNow -- count of existing descendant objects
32 static LONG GetObjectCount() { return object_count_; } 33 static LONG GetObjectCount() { return object_count_; }
33 34
34 protected: 35 protected:
35 LONG reference_count_; // mind the reference counting for this object 36 LONG reference_count_; // mind the reference counting for this object
36 static LONG object_count_; // count of all these objects 37 static LONG object_count_; // count of all these objects
37 }; 38 };
38 39
39 40
40 // OneClassFactory<T> 41 // OneClassFactory<T>
41 // Knows how to be a factory for T's 42 // Knows how to be a factory for T's
42 template <class T> 43 template <class T>
43 class OneClassFactory : public GenericClassFactory 44 class OneClassFactory : public GenericClassFactory
44 { 45 {
45 public: 46 public:
46 //IClassFactory methods 47 //IClassFactory methods
47 STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObject); 48 STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObject);
48 }; 49 };
49 50
50 51
51 template <class T> 52 template <class T>
52 STDMETHODIMP OneClassFactory<T>::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid , void** result) { 53 STDMETHODIMP OneClassFactory<T>::CreateInstance(LPUNKNOWN pUnkOuter,
54 REFIID riid, void** result) {
53 *result = NULL; 55 *result = NULL;
54 56
55 if(pUnkOuter != NULL) 57 if(pUnkOuter != NULL)
56 return CLASS_E_NOAGGREGATION; 58 return CLASS_E_NOAGGREGATION;
57 59
58 T* const obj = new T(); 60 T* const obj = new T();
59 if(!obj) 61 if(!obj)
60 return E_OUTOFMEMORY; 62 return E_OUTOFMEMORY;
61 63
62 obj->AddRef(); 64 obj->AddRef();
63 HRESULT const hr = obj->QueryInterface(riid, result); 65 HRESULT const hr = obj->QueryInterface(riid, result);
64 obj->Release(); 66 obj->Release();
65 67
66 return hr; 68 return hr;
67 } 69 }
68 70
69 #endif 71 #endif
70 72
OLDNEW
« no previous file with comments | « chrome/common/chrome_plugin_api.h ('k') | chrome/common/classfactory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698