6e237b
6e237b
6e237b
#include <tstringid.h></tstringid.h>
6e237b
6e237b
#include <qmutex></qmutex>
6e237b
#include <qmutexlocker></qmutexlocker>
6e237b
6e237b
//---------------------------------------------------------
6e237b
6e237b
struct TStringId::StaticData {
6e237b
  Map map;
6e237b
  std::vector<iterator> iterators;</iterator>
6e237b
  Iterator none;
6e237b
  QMutex mutex;
6e237b
  StaticData() {
6e237b
    map[std::string()] = 0;
6e237b
    none = map.begin();
6e237b
    iterators.push_back(none);
6e237b
  }
6e237b
6e237b
  static StaticData& instance() {
6e237b
    static StaticData data;
6e237b
    return data;
6e237b
  }
6e237b
};
6e237b
6e237b
//---------------------------------------------------------
6e237b
6e237b
const TStringId::Iterator&
6e237b
TStringId::none()
6e237b
  { return StaticData::instance().none; }
6e237b
6e237b
//---------------------------------------------------------
6e237b
6e237b
TStringId::Iterator
6e237b
TStringId::genIter(const std::string &str) {
6e237b
  StaticData &data = StaticData::instance();
6e237b
  if (str.empty()) return data.none;
6e237b
6e237b
  QMutexLocker lock(&data.mutex);
6e237b
  Iterator i = data.map.find(str);
6e237b
  if (i == data.map.end()) {
6e237b
    i = data.map.insert(std::pair<std::string, int="">(str, (int)data.iterators.size())).first;</std::string,>
6e237b
    data.iterators.push_back(i);
6e237b
  }
6e237b
  return i;
6e237b
}
6e237b
6e237b
//---------------------------------------------------------
6e237b
6e237b
TStringId::Iterator
6e237b
TStringId::findIter(int id) {
6e237b
  StaticData &data = StaticData::instance();
6e237b
  if (id <= 0) return data.none;
6e237b
6e237b
  QMutexLocker lock(&data.mutex);
6e237b
  return id < (int)data.iterators.size() ? data.iterators[id] : data.none;
6e237b
}
6e237b
6e237b
//---------------------------------------------------------
6e237b
6e237b
TStringId::Iterator
6e237b
TStringId::findIter(const std::string &str) {
6e237b
  StaticData &data = StaticData::instance();
6e237b
  if (str.empty()) return data.none;
6e237b
6e237b
  QMutexLocker lock(&data.mutex);
6e237b
  Iterator i = data.map.find(str);
6e237b
  return i == data.map.end() ? data.none : i;
6e237b
}
6e237b
6e237b
//---------------------------------------------------------