WvStreams
Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
UniMountGen Class Referenceabstract

The UniMountTree implementation realized as a UniConfGen. More...

#include <unimountgen.h>

Inheritance diagram for UniMountGen:
Inheritance graph
[legend]

Classes

class  UniGenMount
 
struct  UniGenMountPairs
 

Public Types

typedef ::UniListIter ListIter
 An iterator over a constant list of keys (see below)
 

Public Member Functions

 UniMountGen ()
 Creates an empty UniConf tree with no mounted stores.
 
virtual ~UniMountGen ()
 Destroys the UniConf tree along with all uncommitted data.
 
void zap ()
 
virtual IUniConfGenmount (const UniConfKey &key, WvStringParm moniker, bool refresh)
 Mounts a generator at a key using a moniker. More...
 
virtual IUniConfGenmountgen (const UniConfKey &key, IUniConfGen *gen, bool refresh)
 Mounts a generator at a key. More...
 
virtual void unmount (IUniConfGen *gen, bool commit)
 Unmounts the generator at a key and releases it. More...
 
virtual IUniConfGenwhichmount (const UniConfKey &key, UniConfKey *mountpoint)
 Finds the generator that owns a key. More...
 
virtual bool ismountpoint (const UniConfKey &key)
 Determines if a key is a mountpoint.
 
virtual bool exists (const UniConfKey &key)
 Without fetching its value, returns true if a key exists. More...
 
virtual bool haschildren (const UniConfKey &key)
 Returns true if a key has children. More...
 
virtual WvString get (const UniConfKey &key)
 Fetches a string value for a key from the registry. More...
 
virtual void set (const UniConfKey &key, WvStringParm value)
 Stores a string value for a key into the registry. More...
 
virtual void setv (const UniConfPairList &pairs)
 Stores multiple key-value pairs into the registry. More...
 
virtual void commit ()
 Commits any changes. More...
 
virtual bool refresh ()
 Refreshes information about a key recursively. More...
 
virtual void flush_buffers ()
 Flushes any commitment/notification buffers . More...
 
virtual Iteriterator (const UniConfKey &key)
 Returns an iterator over the children of the specified key. More...
 
virtual Iterrecursiveiterator (const UniConfKey &key)
 Like iterator(), but the returned iterator is recursive, that is, it will return children of the immediate children, not just the immediate children themselves. More...
 
virtual void add_callback (void *cookie, const UniConfGenCallback &callback)
 Adds a callback for change notification. More...
 
virtual void del_callback (void *cookie)
 Removes a callback for change notification.
 
void dispatch_delta (const UniConfKey &key, WvStringParm value)
 Immediately sends notification that a key has possibly changed. More...
 
void hold_delta ()
 Pauses notifications until matched with a call to unhold_delta(). More...
 
void unhold_delta ()
 Resumes notifications when each hold_delta() has been matched. More...
 
void clear_delta ()
 Clears the list of pending notifications without sending them. More...
 
void flush_delta ()
 Flushes the list of pending notifications by sending them. More...
 
void delta (const UniConfKey &key, WvStringParm value)
 Call this when a key's value or children have possibly changed. More...
 
virtual bool isok ()
 Determines if the generator is usable and working properly. More...
 
virtual void prefetch (const UniConfKey &key, bool recursive)
 Indicate that we will eventually be interested in doing get(), haschildren(), or other "get-like" operations on a particular key or tree of keys. More...
 
virtual int str2int (WvStringParm s, int defvalue) const
 Converts a string to an integer. More...
 
virtual unsigned int addRef ()=0
 Indicate you are using this object. More...
 
virtual unsigned int release ()=0
 Indicate that you are finished using this object. More...
 
virtual IObjectgetInterface (const UUID &)=0
 Returns the requested XPLC interface. More...
 
virtual IWeakRefgetWeakRef ()=0
 Return a weak reference to this object. More...
 

Protected Types

typedef class WvList< UniGenMountMountList
 

Protected Member Functions

 UniMountGen (const UniMountGen &other)
 undefined.
 
void setv_naive (const UniConfPairList &pairs)
 

Protected Attributes

MountList mounts
 

Detailed Description

The UniMountTree implementation realized as a UniConfGen.

Definition at line 17 of file unimountgen.h.

Member Function Documentation

◆ mount()

IUniConfGen * UniMountGen::mount ( const UniConfKey key,
WvStringParm  moniker,
bool  refresh 
)
virtual

Mounts a generator at a key using a moniker.

Returns the generator instance pointer, or NULL on failure.

Definition at line 176 of file unimountgen.cc.

References IUniConfGen::exists(), mountgen(), refresh(), and IUniConfGen::set().

Referenced by UniConfRoot::UniConfRoot().

◆ mountgen()

IUniConfGen * UniMountGen::mountgen ( const UniConfKey key,
IUniConfGen gen,
bool  refresh 
)
virtual

Mounts a generator at a key.

Takes ownership of the supplied generator instance.

"key" is the key "gen" is the generator instance "refresh" is if true, refreshes the generator after mount Returns: the generator instance pointer, or NULL on failure

Definition at line 191 of file unimountgen.cc.

References IUniConfGen::add_callback(), UniConfGen::delta(), IUniConfGen::exists(), get(), UniConfGen::hold_delta(), IUniConfGen::refresh(), refresh(), IUniConfGen::set(), and UniConfGen::unhold_delta().

Referenced by mount(), and UniConfRoot::UniConfRoot().

◆ unmount()

void UniMountGen::unmount ( IUniConfGen gen,
bool  commit 
)
virtual

Unmounts the generator at a key and releases it.

"gen" is the generator instance "commit" is if true, commits the generator before unmount

Definition at line 219 of file unimountgen.cc.

References IUniConfGen::commit(), commit(), IUniConfGen::del_callback(), UniConfGen::delta(), get(), UniConfGen::hold_delta(), UniConfKey::suborsame(), and UniConfGen::unhold_delta().

◆ whichmount()

IUniConfGen * UniMountGen::whichmount ( const UniConfKey key,
UniConfKey mountpoint 
)
virtual

Finds the generator that owns a key.

If the key exists, returns the generator that provides its contents. Otherwise returns the generator that would be updated if a value were set.

"key" is the key "mountpoint" is if not NULL, replaced with the mountpoint path on success Returns: the handle, or a null handle if none

Definition at line 271 of file unimountgen.cc.

◆ exists()

bool UniMountGen::exists ( const UniConfKey key)
virtual

Without fetching its value, returns true if a key exists.

This is provided because it is often more efficient to test existance than to actually retrieve the value.

The default implementation returns !get(key).isnull().

Reimplemented from UniConfGen.

Definition at line 100 of file unimountgen.cc.

◆ haschildren()

bool UniMountGen::haschildren ( const UniConfKey key)
virtual

Returns true if a key has children.

This is provided because it is often more efficient to test existance than to actually retrieve the keys.

The default implementation uses the iterator returned by iterator() to test whether the child has any keys. Subclasses are strongly encouraged to provide a better implementation.

Reimplemented from UniConfGen.

Definition at line 113 of file unimountgen.cc.

◆ get()

WvString UniMountGen::get ( const UniConfKey key)
virtual

Fetches a string value for a key from the registry.

If the key doesn't exist, the return value has .isnull() == true.

Implements UniConfGen.

Definition at line 29 of file unimountgen.cc.

Referenced by mountgen(), and unmount().

◆ set()

void UniMountGen::set ( const UniConfKey key,
WvStringParm  value 
)
virtual

Stores a string value for a key into the registry.

If the value is WvString::null, the key is deleted.

Implements UniConfGen.

Definition at line 46 of file unimountgen.cc.

◆ setv()

void UniMountGen::setv ( const UniConfPairList &  pairs)
virtual

Stores multiple key-value pairs into the registry.

If the value is WvString::null, the key is deleted.

Implements UniConfGen.

Definition at line 70 of file unimountgen.cc.

◆ commit()

void UniMountGen::commit ( )
virtual

Commits any changes.

The default implementation does nothing.

Reimplemented from UniConfGen.

Definition at line 164 of file unimountgen.cc.

References UniConfGen::hold_delta(), and UniConfGen::unhold_delta().

Referenced by unmount().

◆ refresh()

bool UniMountGen::refresh ( )
virtual

Refreshes information about a key recursively.

May discard uncommitted data.

The default implementation always returns true.

Reimplemented from UniConfGen.

Definition at line 149 of file unimountgen.cc.

References UniConfGen::hold_delta(), and UniConfGen::unhold_delta().

Referenced by mount(), and mountgen().

◆ flush_buffers()

virtual void UniMountGen::flush_buffers ( )
inlinevirtual

Flushes any commitment/notification buffers .

The default implementation always returns true. NOTE: This method should be 'protected'

Implements UniConfGen.

Definition at line 105 of file unimountgen.h.

◆ iterator()

UniMountGen::Iter * UniMountGen::iterator ( const UniConfKey key)
virtual

Returns an iterator over the children of the specified key.

May return NULL or an empty iterator if the key has no children.

The caller takes ownership of the returned iterator and is responsible for deleting it when finished.

Implements UniConfGen.

Definition at line 308 of file unimountgen.cc.

References UniListIter::add(), UniConfKey::first(), UniConfKey::last(), UniConfKey::numsegments(), and UniConfKey::suborsame().

◆ recursiveiterator()

UniMountGen::Iter * UniMountGen::recursiveiterator ( const UniConfKey key)
virtual

Like iterator(), but the returned iterator is recursive, that is, it will return children of the immediate children, not just the immediate children themselves.

May return NULL if the key has no immediate children (since that means there are also no indirect children).

Note that UniConfGen::recursiveiterator() is a default implementation that just calls iterator() recursively, so it'll work in any derived class without you overriding this function. However, you might want to do it anyway if it would be more efficient in your particular case.

Reimplemented from UniConfGen.

Definition at line 348 of file unimountgen.cc.

References UniConfGen::recursiveiterator().

◆ add_callback()

void UniConfGen::add_callback ( void *  cookie,
const UniConfGenCallback &  callback 
)
virtualinherited

Adds a callback for change notification.

Must not be reimplemented by subclasses of UniConfGen.

Implements IUniConfGen.

Definition at line 158 of file uniconfgen.cc.

Referenced by UniConfRoot::UniConfRoot().

◆ dispatch_delta()

void UniConfGen::dispatch_delta ( const UniConfKey key,
WvStringParm  value 
)
inherited

Immediately sends notification that a key has possibly changed.

Takes care of the details of invoking the callback.

Note: You probably want to be using delta() instead.

Definition at line 71 of file uniconfgen.cc.

Referenced by UniConfGen::delta(), and UniConfGen::flush_delta().

◆ hold_delta()

void UniConfGen::hold_delta ( )
inherited

Pauses notifications until matched with a call to unhold_delta().

While paused, notification events are placed into a pending list. Redundant notifications may be discarded.

Use this to safeguard non-reentrant code.

Definition at line 32 of file uniconfgen.cc.

Referenced by UniTransactionGen::commit(), commit(), UniConfGen::delta(), UniConfGen::haschildren(), mountgen(), UniTransactionGen::refresh(), refresh(), UniTempGen::set(), UniClientGen::set(), UniTransactionGen::set(), UniClientGen::setv(), UniTransactionGen::setv(), and unmount().

◆ unhold_delta()

void UniConfGen::unhold_delta ( )
inherited

Resumes notifications when each hold_delta() has been matched.

On resumption, dispatches all pending notifications except those that were destined to watches that were removed.

Use this to safeguard non-reentrant code.

Definition at line 38 of file uniconfgen.cc.

References UniConfGen::flush_delta().

Referenced by UniTransactionGen::commit(), commit(), UniConfGen::delta(), UniConfGen::haschildren(), mountgen(), UniTransactionGen::refresh(), refresh(), UniTempGen::set(), UniClientGen::set(), UniTransactionGen::set(), UniClientGen::setv(), UniTransactionGen::setv(), and unmount().

◆ clear_delta()

void UniConfGen::clear_delta ( )
inherited

Clears the list of pending notifications without sending them.

Does not affect the hold nesting count.

Definition at line 47 of file uniconfgen.cc.

◆ flush_delta()

void UniConfGen::flush_delta ( )
inherited

Flushes the list of pending notifications by sending them.

Does not affect the hold nesting count.

Definition at line 53 of file uniconfgen.cc.

References UniConfGen::dispatch_delta().

Referenced by UniConfGen::unhold_delta().

◆ delta()

void UniConfGen::delta ( const UniConfKey key,
WvStringParm  value 
)
inherited

◆ isok()

bool UniConfGen::isok ( )
virtualinherited

Determines if the generator is usable and working properly.

The default implementation always returns true.

Implements IUniConfGen.

Reimplemented in UniTransactionGen, UniRetryGen, UniFilterGen, UniReplicateGen, UniPStoreGen, UniClientGen, UniUnwrapGen, UniListGen, UniCacheGen, and UniRegistryGen.

Definition at line 152 of file uniconfgen.cc.

◆ prefetch()

virtual void UniConfGen::prefetch ( const UniConfKey key,
bool  recursive 
)
inlinevirtualinherited

Indicate that we will eventually be interested in doing get(), haschildren(), or other "get-like" operations on a particular key or tree of keys.

The generator may be able to speed up these operations by, say, caching them in advance.

This function is not allowed to do blocking operations. It is allowed to do nothing at all, however, and then get() might block later.

Implements IUniConfGen.

Reimplemented in UniRetryGen, UniFilterGen, and UniUnwrapGen.

Definition at line 282 of file uniconfgen.h.

◆ str2int()

int UniConfGen::str2int ( WvStringParm  s,
int  defvalue 
) const
virtualinherited

Converts a string to an integer.

If the string is null or not recognized, return defvalue.

This is here to support the common str2int(get(key)).

The default implementation recognizes the booleans 'true', 'yes', 'on' and 'enabled' as 1, and 'false', 'no', 'off' and 'disabled' as 0.

Implements IUniConfGen.

Definition at line 126 of file uniconfgen.cc.

◆ addRef()

virtual unsigned int IObject::addRef ( )
pure virtualinherited

Indicate you are using this object.

This increases the reference count of the object by one. Usually, when the reference count reaches zero, the object is freed automatically.

This called a "strong reference", because they will prevent the object from being destroyed. They should thus be used carefully, as they control the lifetime of the object. For example, you do not need to call addRef() on object passed as parameters, unless you intend on keeping them.

addRef() is often called automatically for you in XPLC, but you'll have to call release() by hand sometimes unless you use xplc_ptr.

Referenced by WvIStreamList::execute(), IObjectImplInternal::getInterface(), StaticServiceHandler::getObject(), WeakRef::getObject(), WvIStreamList::post_select(), WvQtStreamClone::WvQtStreamClone(), and WvSSLStream::WvSSLStream().

◆ release()

virtual unsigned int IObject::release ( )
pure virtualinherited

Indicate that you are finished using this object.

This decreases the reference count of the object by one. Usually, when the reference count reaches zero, the object is freed automatically.

You will usually need to manually release() any object given to you by any other XPLC function, unless you give the object to someone else who will call release.

If you use xplc_ptr, it will do this for you.

Referenced by WvIStreamList::execute(), mutate(), NewMoniker::resolve(), and MonikerService::resolve().

◆ getInterface()

virtual IObject* IObject::getInterface ( const UUID )
pure virtualinherited

Returns the requested XPLC interface.

Will return NULL if the interface is not supported. The returned interface has been addRef()ed, so you will need to release() it when done. Note that the interface returned may be a pointer to the same object or a different one - that's none of your business. Asking for the IObject interface should always return the same pointer for a given logical object, so this can be used for comparison by identity.

You should probably use the convenient mutate() and get() functions instead of this, or use an xplc_ptr, which mutates the object for you.

Referenced by get(), and mutate().

◆ getWeakRef()

virtual IWeakRef* IObject::getWeakRef ( )
pure virtualinherited

Return a weak reference to this object.

A weak reference points at the object, but does not control the lifetime of the object. An object can thus still be deleted while someone holds a weak reference. You will still need to release() the weak reference when you are done with it.

See also
IWeakRef

The documentation for this class was generated from the following files: