⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uniqueobject.h.svn-base

📁 moses开源的机器翻译系统
💻 SVN-BASE
字号:
/* ---------------------------------------------------------------- *//* Copyright 2004 (c) by RWTH Aachen - Lehrstuhl fuer Informatik VI *//* Richard Zens                                                     *//* ---------------------------------------------------------------- */#ifndef UNIQUEOBJECT_HH_#define UNIQUEOBJECT_HH_#include <iostream>#include <set>template<class T>  T const* uniqueObject(const T& x,int mode=0) {  typedef std::set<T> Pool;  static Pool pool;  static size_t Size=0;  if(mode==0) {    std::pair<typename Pool::iterator,bool> p=pool.insert(x);    if(p.second && (++Size%100000==0))      std::cerr<<"uniqueObjects -- size: "<<Size<<" object size: "<<sizeof(T)<<"\n";      return &(*(p.first));  }  else {    pool.clear();Size=0;return 0;  }}template<class T> class UniqueObjectManager {public:  typedef T Object;private:  typedef std::set<T> Pool;  Pool pool;public:  UniqueObjectManager() {}  void clear() {pool.clear();}  size_t size() const {return pool.size();}  Object const * operator()(const Object& x) {#ifdef DEBUG    std::pair<typename Pool::iterator,bool> p=pool.insert(x);    if(p.second && (size()%100000==0))      std::cerr<<"uniqueObjects -- size: "<<size()<<" object size: "<<sizeof(Object)<<"\n";        return &(*(p.first));#else    return  &(*(pool.insert(x).first));#endif  }};#endif

⌨️ 快捷键说明

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