+DictEntry *DictSet::NewVirtualDictEntry( uint16_t group,
+ uint16_t elem,
+ const VRKey &vr,
+ const TagName &vm,
+ const TagName &name)
+{
+ DictEntry *entry;
+
+ // Let's follow 'Purify' advice
+ //
+ // const std::string tag = DictEntry::TranslateToKey(group,elem)
+ // + "#" + vr + "#" + vm + "#" + name;
+#if FASTTAGKEY && 0
+ // FIXME
+ TagKey tag;
+ tag.tab[0] = group;
+ tag.tab[1] = elem;
+#else
+ char res[10];
+ sprintf(res,"%04x|%04x", group, elem);
+ ExtendedTagKey tag = res;
+ tag += "#" + vr.str() + "#" + vm + "#" + name;
+#endif
+
+ ExtendedTagKeyHT::iterator it;
+
+ it = VirtualEntries.find(tag);
+ if ( it != VirtualEntries.end() )
+ {
+ entry = &(it->second);
+ }
+ else
+ {
+ DictEntry ent(group, elem, vr, vm, name);
+ VirtualEntries.insert(
+ ExtendedTagKeyHT::value_type(tag, ent) );
+ entry = &(VirtualEntries.find(tag)->second);
+ }
+
+ return entry;