ordkeyma.cpp

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C++ 代码 · 共 90 行

CPP
90
字号
/****************************************************************************
File: OrdKeyMap.cpp

Description:

Notes:

History:
****************************************************************************/     

#ifndef JAM_OrdKeyMap_CPP
#define JAM_OrdKeyMap_CPP

#include <OrdKeyMa.h> //## p

//************************************************************************
// JAM_OrdKeyMapComp member functions
//************************************************************************

template<class K, class V, class KeyComp>
JAM_OrdSetComp<K,KeyComp> JAM_OrdKeyMapComp<K,V,KeyComp>::keys() const
{
   JAM_OrdSetComp<K,KeyComp> keys;
   for (JAM_Iter< JAM_OrdSet< JAM_KeyValue<K,V,KeyComp> > > kv(&_data);
        !kv.offEnd(); ++kv)
      keys += kv()._key;
   return keys;
}

template<class K, class V, class KeyComp>
void JAM_OrdKeyMapComp<K,V,KeyComp>::enter(const K& key, const V& value)
{
   JAM_KeyValue<K,V,KeyComp> kv(key, value);
   JAM_Muter< JAM_OrdSet< JAM_KeyValue<K,V,KeyComp> > > i(&_data,_data.search(kv));
   if (i.offEnd())
      _data.enter(kv);   // enter new key-value
   else
      (*i)._value = value;   // replace value already in map
}


//**************************************************************************
// JAM_OrdKeyMapComp functions                                                     
//**************************************************************************

template<class K, class V, class KeyComp> 
   ostream& operator<<(ostream& os, const JAM_OrdKeyMapComp<K,V,KeyComp>& map)
{
   os << "[";
   JAM_OrdKeyMapCompIter<K,V,KeyComp> i(&map);
   while (i) {
      os << i.key() << " : " << i.value();
      if (++i) os << ", ";
      }
   os << "]\n";
   return os;
}

template<class K, class V, class KeyComp> 
   istream& operator>>(istream& is, JAM_OrdKeyMapComp<K,V,KeyComp>& map)
{
   is >> ws;
   JAM_assert(is.peek()=='[');
   is.get();
   is >> ws;
   while (!is.eof() && is.peek()!=']') {
      K key;
      V value;
      is >> key;

      is >> ws;
      if (is.peek()==':') { is.get(); is >> ws; }

      is >> value;

      is >> ws;
      if (is.peek()==',') { is.get(); is >> ws; }

      JAM_assert(is.good());
      map.enter(key, value);
      cout << "Read " << key << " : " << value << endl;
      }
   is.get();
   JAM_assert(is.good());
   return is;
}

#endif // JAM_OrdKeyMap_CPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?