uniqueobject.h.svn-base

来自「moses开源的机器翻译系统」· SVN-BASE 代码 · 共 55 行

SVN-BASE
55
字号
/* ---------------------------------------------------------------- *//* 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 + =
减小字号Ctrl + -
显示快捷键?