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

📄 collectionproxy.h

📁 cint...昨天看到有个c++解释器,叫CINT,down下来一用,很爽,推荐大家也去看一看。 相信不少朋友们早就知道这个东西了
💻 H
📖 第 1 页 / 共 2 页
字号:
      };      /** @class TCollectionProxy::Map TCollectionProxy.h TCollectionProxy.h        *       * Small helper to encapsulate all necessary data accesses for        * containers like Set, multiset etc.       *       * @author  M.Frank       * @version 1.0       * @date    10/10/2004       */      template <class T> struct MapInsert : public CollType<T> {         typedef T                      Cont_t;         typedef typename T::iterator   Iter_t;         typedef typename T::value_type Value_t;         typedef Environ<Iter_t>        Env_t;         typedef Env_t                 *PEnv_t;         typedef Cont_t                *PCont_t;         typedef Value_t               *PValue_t;         static void* feed(void* env)  {            PEnv_t   e = PEnv_t(env);            PCont_t  c = PCont_t(e->object);            PValue_t m = PValue_t(e->start);            for (size_t i=0; i<e->size; ++i, ++m)               c->insert(*m);            return 0;         }         static void* resize(void* /* env */ )  {            return 0;         }         static int value_offset()  {            return ((char*)&((PValue_t(0x1000))->second)) - ((char*)PValue_t(0x1000));         }      };      // Need specialization for boolean references due to stupid STL vector<bool>      template<> inline void* ROOT::Reflex::Address<std::vector<bool,std::allocator<bool> >::const_reference>::address(std::vector<bool,std::allocator<bool> >::const_reference ) {         return 0;      }   }}#include <vector>namespace ROOT {   namespace Reflex  {      /** @class CollFuncTable        *       * Table containing pointers to concrete functions to manipulate        * Collections in a generic way       *       * @author  M.Frank       */      struct RFLX_API CollFuncTable  {         size_t iter_size;         size_t value_diff;         int    value_offset;         void*  (*size_func)(void*);         void*  (*resize_func)(void*);         void*  (*clear_func)(void*);         void*  (*first_func)(void*);         void*  (*next_func)(void*);         void*  (*construct_func)(void*);         void*  (*destruct_func)(void*);         void*  (*feed_func)(void*);         void*  (*collect_func)(void*);      };      template <typename T> struct CFTGenerator {         static  CollFuncTable* Generate()  {            typedef typename T::Value_t Value_t;            typedef std::pair<Value_t,Value_t> Pair_t;            Pair_t* ptr = (Pair_t*)0x1000;            CollFuncTable*  p  = new CollFuncTable();            p->iter_size       = sizeof(typename T::Iter_t);            p->value_diff      = ((char*)&ptr->second) - ((char*)&ptr->first);            p->value_offset    = T::value_offset();            p->size_func       = T::size;            p->first_func      = T::first;            p->next_func       = T::next;            p->clear_func      = T::clear;            p->resize_func     = T::resize;            p->collect_func    = T::collect;            p->construct_func  = T::construct;            p->destruct_func   = T::destruct;            p->feed_func       = T::feed;            return p;         }      };      struct CFTNullGenerator {         static void* Void_func(void*) {            return 0;         }         static  CollFuncTable* Generate()  {            CollFuncTable*  p  = new CollFuncTable();            p->iter_size       = 4;            p->value_diff      = 0;            p->value_offset    = 0;            p->size_func       = Void_func;            p->first_func      = Void_func;            p->next_func       = Void_func;            p->clear_func      = Void_func;            p->resize_func     = Void_func;            p->collect_func    = Void_func;            p->construct_func  = Void_func;            p->destruct_func   = Void_func;            p->feed_func       = Void_func;            return p;         }      };      // General proxy (dummy)      template <typename A> struct Proxy {};      // Specialization for std::vector       template <class T, class A> struct Proxy< std::vector<T,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Pushback<std::vector<T,A> > >::Generate();         }      };      // Specialization for std::list       template <class T, class A> struct Proxy< std::list<T,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Pushback<std::list<T,A> > >::Generate();         }      };      // Specialization for std::deque       template <class T, class A> struct Proxy< std::deque<T,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Pushback<std::deque<T,A> > >::Generate();         }      };      // Specialization for std::set       template <class K, class T, class A> struct Proxy< std::set<K,T,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Insert<std::set<K,T,A> > >::Generate();         }      };      // Specialization for std::multiset       template <class K, class T, class A> struct Proxy< std::multiset<K,T,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Insert<std::multiset<K,T,A> > >::Generate();         }      };      // Specialization for std::map       template <class K, class T, class R, class A> struct Proxy< std::map<K,T,R,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<MapInsert<std::map<K,T,R,A> > >::Generate();         }      };      // Specialization for std::multimap       template <class K, class T, class R, class A> struct Proxy< std::multimap<K,T,R,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<MapInsert<std::multimap<K,T,R,A> > >::Generate();         }      };      // Specialization for std::queue -- not implemented       template <class K, class T> struct Proxy< std::queue<K,T> > {         static CollFuncTable* Generate()  { return CFTNullGenerator::Generate(); }      };      // Specialization for std::stack -- not implemented       template <class K, class T> struct Proxy< std::stack<K,T> > {         static CollFuncTable* Generate()  { return CFTNullGenerator::Generate(); }      };#if defined(__GNUC__)      // Specialization for __gnu_cxx::hash_set       template <class T, class F, class E, class A> struct Proxy< __gnu_cxx::hash_set<T,F,E,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Insert<__gnu_cxx::hash_set<T,F,E,A> > >::Generate();         }      };      // Specialization for __gnu_cxx::hash_multiset       template <class T, class F, class E, class A> struct Proxy< __gnu_cxx::hash_multiset<T,F,E,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Insert<__gnu_cxx::hash_multiset<T,F,E,A> > >::Generate();         }      };      // Specialization for __gnu_cxx::hash_map       template <class K, class T, class F, class E, class A> struct Proxy< __gnu_cxx::hash_map<K,T,F,E,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<MapInsert<__gnu_cxx::hash_map<K,T,F,E,A> > >::Generate();         }      };      // Specialization for __gnu_cxx::hash_multimap       template <class K, class T, class F, class E, class A> struct Proxy< __gnu_cxx::hash_multimap<K,T,F,E,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<MapInsert<__gnu_cxx::hash_multimap<K,T,F,E,A> > >::Generate();         }      };#elif defined(_WIN32)      // Specialization for stdext::hash_multiset       template <class K, class T, class A> struct Proxy< stdext::hash_multiset<K,T,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Insert<stdext::hash_multiset<K,T,A> > >::Generate();         }      };      // Specialization for stdext::hash_set       template <class K, class T, class A> struct Proxy< stdext::hash_set<K,T,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<Insert<stdext::hash_set<K,T,A> > >::Generate();         }      };      // Specialization for stdext::hash_map       template <class K, class T, class R, class A> struct Proxy< stdext::hash_map<K,T,R,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<MapInsert<stdext::hash_map<K,T,R,A> > >::Generate();         }      };      // Specialization for stdext::hash_multimap       template <class K, class T, class R, class A> struct Proxy< stdext::hash_multimap<K,T,R,A> > {         static CollFuncTable* Generate()  {            return CFTGenerator<MapInsert<stdext::hash_multimap<K,T,R,A> > >::Generate();         }      };#endif   }}#endif // ROOT_Reflex_CollectionProxy

⌨️ 快捷键说明

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