+#if FASTTAGKEY
+typedef union {
+ uint16_t tab[2];
+ uint32_t tagkey;
+ } TagKey;
+/* ostream operator for TagKey */
+inline std::ostream& operator<<(std::ostream& _O, TagKey _val)
+{
+ return ( _O << std::ios::hex << _val.tab[0]
+ << "|" << std::ios::hex << _val.tab[1] );
+};
+inline bool operator==(TagKey _self, TagKey _val)
+{
+ return _self.tagkey == _val.tagkey;
+};
+inline bool operator<(TagKey _self, TagKey _val)
+{
+ return _self.tagkey < _val.tagkey;
+};
+// FIXME
+// This one is clearly weird, see gdcmDocument:918
+inline TagKey operator+(TagKey _self, TagKey _val)
+{
+ TagKey r;
+ r.tagkey = _self.tagkey + _val.tagkey;
+ return r;
+};
+#else