unisubtreegen.cc

00001 /*
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  * 
00005  * A UniConfGen for returning only a particular subtree of a given generator.
00006  */
00007 #include "unisubtreegen.h"
00008 #include "wvbuf.h"
00009 #include "wvtclstring.h"
00010 #include "wvmoniker.h"
00011 #include "wvlinkerhack.h"
00012 
00013 WV_LINK(UniSubtreeGen);
00014 
00015 
00016 static IUniConfGen *creator(WvStringParm s)
00017 {
00018     WvConstInPlaceBuf buf(s, s.len());
00019     WvString one(wvtcl_getword(buf)), two(wvtcl_getword(buf));
00020 
00021     if (!one) one = "";
00022     if (!two) two = "";
00023     
00024     return new UniSubtreeGen(wvcreate<IUniConfGen>(one), two);
00025 }
00026 
00027 static WvMoniker<IUniConfGen> subtreereg("subtree", creator);
00028 
00029 
00030 UniSubtreeGen::UniSubtreeGen(IUniConfGen *gen, const UniConfKey &_subkey)
00031     : UniFilterGen(gen), subkey(_subkey)
00032 {
00033     // nothing special
00034 }
00035 
00036 
00037 UniConfKey UniSubtreeGen::keymap(const UniConfKey &key)
00038 {
00039     if (key == UniConfKey())
00040         return subkey;
00041     else if (subkey == UniConfKey())
00042         return key;
00043     else
00044         return UniConfKey(subkey, key);
00045 }
00046 
00047 UniConfKey UniSubtreeGen::reversekeymap(const UniConfKey &key)
00048 {
00049     if (key.numsegments() >= subkey.numsegments())
00050         return UniConfKey(key.removefirst(subkey.numsegments()));
00051 
00052     return key;
00053 }

Generated on Thu May 25 21:51:02 2006 for WvStreams by  doxygen 1.4.6