00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * Support for moniker registries. See wvmoniker.h. 00006 */ 00007 #ifndef __WVMONIKERREGISTRY_H 00008 #define __WVMONIKERREGISTRY_H 00009 00010 #include "wvmoniker.h" 00011 #include "wvscatterhash.h" 00012 00018 class WvMonikerRegistry //: public GenericComponent<IObject> 00019 { 00020 struct Registration 00021 { 00022 WvString id; 00023 WvMonikerCreateFunc *func; 00024 00025 Registration(WvStringParm _id, WvMonikerCreateFunc *_func) 00026 : id(_id) 00027 { func = _func; } 00028 }; 00029 00030 DeclareWvScatterDict(Registration, WvString, id); 00031 00032 unsigned refcount; 00033 00034 public: 00035 UUID reg_iid; 00036 RegistrationDict dict; 00037 00038 WvMonikerRegistry(const UUID &iid); 00039 virtual ~WvMonikerRegistry(); 00040 00041 virtual void add(WvStringParm id, WvMonikerCreateFunc *func); 00042 virtual void del(WvStringParm id); 00043 00044 virtual void *create(WvStringParm _s); 00045 00046 // find a registry for objects of the given interface UUID 00047 static WvMonikerRegistry *find_reg(const UUID &iid); 00048 00049 // IObject stuff 00050 virtual IObject *getInterface(const UUID &uuid); 00051 00052 // we can't use GenericComponent's implementation, since we have to 00053 // unregister ourselves on the second-last release(). 00054 virtual unsigned int addRef(); 00055 virtual unsigned int release(); 00056 }; 00057 00058 00059 #endif // __WVMONIKERREGISTRY_H