WvStreams
wvmonikerregistry.h
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 "wvlinklist.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), func(_func)
00027             { }
00028     };
00029     
00030     DeclareWvList(Registration);
00031 
00032     unsigned refcount;
00033     
00034 public:
00035     UUID reg_iid;
00036     RegistrationList list;
00037     
00038     WvMonikerRegistry(const UUID &iid);
00039     virtual ~WvMonikerRegistry();
00040     
00041     virtual void add(WvStringParm id, WvMonikerCreateFunc *func,
00042                         const bool override = false);
00043     virtual void del(WvStringParm id);
00044     
00045     virtual void *create(WvStringParm _s, IObject *_obj);
00046     
00047     // find a registry for objects of the given interface UUID
00048     static WvMonikerRegistry *find_reg(const UUID &iid);
00049     
00050     // IObject stuff
00051     virtual IObject *getInterface(const UUID &uuid);
00052     
00053     // we can't use GenericComponent's implementation, since we have to
00054     // unregister ourselves on the second-last release().
00055     virtual unsigned int addRef();
00056     virtual unsigned int release();
00057 };
00058 
00059 
00060 #endif // __WVMONIKERREGISTRY_H