WvStreams
|
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, IObject *_obj) 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 bool UniSubtreeGen::keymap(const UniConfKey &unmapped_key, UniConfKey &mapped_key) 00038 { 00039 if (unmapped_key.isempty()) 00040 mapped_key = subkey; 00041 else 00042 mapped_key = UniConfKey(subkey, unmapped_key); 00043 return true; 00044 } 00045 00046 bool UniSubtreeGen::reversekeymap(const UniConfKey &mapped_key, UniConfKey &unmapped_key) 00047 { 00048 UniConfKey _unmapped_key; 00049 bool result = subkey.suborsame(mapped_key, _unmapped_key); 00050 if (result) 00051 unmapped_key = _unmapped_key; 00052 return result; 00053 }