ROOT logo
// @(#)root/reflex:$Id: CollectionProxy.h 36698 2010-11-16 16:40:22Z axel $
// Author: Markus Frank 2004

// Copyright CERN, CH-1211 Geneva 23, 2004-2006, All rights reserved.
//
// Permission to use, copy, modify, and distribute this software for any
// purpose is hereby granted without fee, provided that this copyright and
// permissions notice appear in all copies and derivatives.
//
// This software is provided "as is" without express or implied warranty.

#ifndef Reflex_CollectionProxy
#define Reflex_CollectionProxy 1 1

#include <cstddef>

// Macro indicating the version of the Collection Proxy interface followed
// by this Reflex build, this must match the version number of
// ROOT_COLLECTIONPROXY_VERSION in ROOT's TVirtutalCollectionProxy.h

#define REFLEX_COLLECTIONPROXY_VERSION 3

// Forward declarations
namespace std {
template <class T, class A> class deque;
template <class T, class A> class vector;
template <class T, class A> class list;
template <class T, class A> class queue;
template <class T, class A> class stack;
template <class K, class T, class A> class set;
template <class K, class T, class A> class multiset;
template <class K, class T, class R, class A> class map;
template <class K, class T, class R, class A> class multimap;
template <class T> class allocator;
}
// Hash map forward declarations
#if defined(__GNUC__)
namespace __gnu_cxx {  // GNU GCC
template <class T, class F, class E, class A> class hash_set;
template <class T, class F, class E, class A> class hash_multiset;
template <class K, class T, class F, class E, class A> class hash_map;
template <class K, class T, class F, class E, class A> class hash_multimap;
}
#elif  defined(_WIN32)
namespace stdext {     // Visual C++
template <class K, class T, class A> class hash_set;
template <class K, class T, class A> class hash_multiset;
template <class K, class T, class R, class A> class hash_map;
template <class K, class T, class R, class A> class hash_multimap;
}
#endif

namespace Reflex  {
#ifndef __CINT__
struct EnvironBase {
   EnvironBase(): fIdx(0),
      fSize(0),
      fObject(0),
      fStart(0),
      fTemp(0),
      fDeleteTemp(false),
      fRefSize(1),
      fSpace(0) {
      //   fprintf("Running default constructor on %p\n",this);
   }


   virtual ~EnvironBase() {}

   size_t fIdx;
   size_t fSize;
   void* fObject;
   void* fStart;
   void* fTemp;
   bool fDeleteTemp;
   int fRefSize;
   size_t fSpace;
};
template <typename T> struct Environ: public EnvironBase {
   typedef T Iter_t;
   Iter_t fIterator;
   T&
   iter() { return fIterator; }

   static void*
   Create() {
      return new Environ();
   }


};
#else
struct EnvironBase;
template <typename T> struct Environ;
#endif

template <typename T> struct Address {
   static void*
   address(T ref) {
      return (void*)& ref;
   }


};

template <class T> struct CollType
#ifdef _KCC  // KAI compiler
   : public Address<typename T::value_type&>
#else
   : public Address<typename T::const_reference>
#endif
{
#ifdef _KCC  // KAI compiler
   typedef Address<typename T::value_type&> Address_t;
#else
   typedef Address<typename T::const_reference> Address_t;
#endif
   typedef T Cont_t;
   typedef typename T::iterator Iter_t;
   typedef typename T::value_type Value_t;
   typedef Reflex::Environ<Iter_t> Env_t;
   typedef Env_t* PEnv_t;
   typedef Cont_t* PCont_t;
   typedef Value_t* PValue_t;

   static inline PCont_t
   object(void* ptr) {
      return PCont_t(PEnv_t(ptr)->fObject);
   }


   static void*
   size(void* env) {
      PEnv_t e = PEnv_t(env);
      e->fSize = PCont_t(e->fObject)->size();
      return &e->fSize;
   }


   static void*
   clear(void* env) {
      object(env)->clear();
      return 0;
   }


   static void*
   first(void* env) {
      PEnv_t e = PEnv_t(env);
      PCont_t c = PCont_t(e->fObject);
      // Assume iterators do not need destruction
      e->fIterator = c->begin();
      e->fSize = c->size();

      if (0 == e->fSize) { return e->fStart = 0; }
#ifdef _KCC  // KAI compiler
      typename T::value_type& ref = *(e->iter());
#else
      typename T::const_reference ref = *(e->iter());
#endif
      return e->fStart = Address_t::address(ref);
   }


   static void*
   next(void* env) {
      PEnv_t e = PEnv_t(env);
      PCont_t c = PCont_t(e->fObject);

      for ( ; e->fIdx > 0 && e->iter() != c->end(); ++(e->iter()), --e->fIdx) {}

      // TODO: Need to find something for going backwards....
      if (e->iter() == c->end()) { return 0; }
#ifdef _KCC  // KAI compiler
      typename T::value_type& ref = *(e->iter());
#else
      typename T::const_reference ref = *(e->iter());
#endif
      return Address_t::address(ref);
   }


   static void*
   construct(void* what, size_t size) {
      PValue_t m = PValue_t(what);

      for (size_t i = 0; i < size; ++i, ++m) {
         ::new (m) Value_t();
      }
      return 0;
   }


   static void*
   collect(void* env) {
      PEnv_t e = PEnv_t(env);
      PCont_t c = PCont_t(e->fObject);
      PValue_t m = PValue_t(e->fStart);

      for (Iter_t i = c->begin(); i != c->end(); ++i, ++m) {
         ::new (m) Value_t(*i);
      }
      return 0;
   }


   static void
   destruct(void* what, size_t size) {
      PValue_t m = PValue_t(what);

      for (size_t i = 0; i < size; ++i, ++m) {
         m->~Value_t();
      }
   }


};

/** @class TCollectionProxy::Map TCollectionProxy.h TCollectionProxy.h
 *
 * Small helper to encapsulate all necessary data accesses for
 * containers like vector, list, deque
 *
 * @author  M.Frank
 * @version 1.0
 * @date    10/10/2004
 */
template <class T> struct Pushback: 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 resize(void* obj, size_t n) {
      PCont_t c = PCont_t(obj);
      c->resize(n);
   }

   static void*
      feed(void*from,void *to,size_t size) {
      PValue_t m = PValue_t(from);
      PCont_t c  = PCont_t(to);

      for (size_t i = 0; i < size; ++i, ++m) {
         c->push_back(*m);
      }
      return 0;
   }


   static int
   value_offset() {
      return 0;
   }


};

/** @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 Insert: 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*from,void*to,size_t size) {
      PValue_t m = PValue_t(from);
      PCont_t c  = PCont_t(to);

      for (size_t i = 0; i < size; ++i, ++m) {
         c->insert(*m);
      }
      return 0;
   }


   static void resize(void* /* obj */, size_t) { }


   static int
   value_offset() {
      return 0;
   }


};

/** @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*from,void *to,size_t size) {
      PValue_t m = PValue_t(from);
      PCont_t  c = PCont_t(to);

      for (size_t i = 0; i < size; ++i, ++m) {
         c->insert(*m);
      }
      return 0;
   }


   static void resize(void* /* obj */, size_t) {
   }


   static int
   value_offset() {
      return ((char*) &((PValue_t(0x1000))->second)) - ((char*) PValue_t(0x1000));
   }


};

#ifndef __CINT__
// Need specialization for boolean references due to stupid STL vector<bool>
template <> inline void* Reflex::Address<std::vector<bool, std::allocator<bool> >::const_reference
>::address(std::vector<bool, std::allocator<bool> >::const_reference) {
   return 0;
}


#endif

}

#include <vector>
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*,size_t);
   void*  (*clear_func)(void*);
   void*  (*first_func)(void*);
   void*  (*next_func)(void*);
   void*  (*construct_func)(void*,size_t);
   void   (*destruct_func)(void*,size_t);
   void*  (*feed_func)(void*,void*,size_t);
   void*  (*collect_func)(void*);
   void*  (*create_env)();
};

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;
      p->create_env = T::Env_t::Create;
      return p;
   } // Generate


};
struct CFTNullGenerator {
   static void*
   Void_func(void*) {
      return 0;
   }


   static void*
   Void_func0() { return 0; }

   static void
   Void_func2b(void*,size_t) { ; }

   static void*
   Void_func2(void*,size_t) { return 0; }

   static void*
   Void_func3(void*,void*,size_t) { 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_func2b;
      p->collect_func = Void_func;
      p->construct_func = Void_func2;
      p->destruct_func = Void_func2b;
      p->feed_func = Void_func3;
      p->create_env = Void_func0;
      return p;
   } // Generate


};
// 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

// Specialization for std::bitset
template <typename B> struct StdBitSetHelper {};


#ifndef __CINT__
template <typename Bitset_t> struct CollType<StdBitSetHelper<Bitset_t> > : public Address<const bool&> {
   typedef Bitset_t Cont_t;
   typedef std::pair<size_t, bool> Iter_t;
   typedef bool Value_t;
   typedef Environ<Iter_t> Env_t;
   typedef Env_t* PEnv_t;
   typedef Cont_t* PCont_t;
   typedef Value_t* PValue_t;

   virtual ~CollType() {}

   static inline PCont_t
   object(void* ptr) {
      return PCont_t(PEnv_t(ptr)->fObject);
   }


   static void*
   size(void* env) {
      PEnv_t e = PEnv_t(env);
      e->fSize = PCont_t(e->fObject)->size();
      return &e->fSize;
   }


   static void*
   clear(void* env) {
      object(env)->reset();
      return 0;
   }


   static void*
   first(void* env) {
      PEnv_t e = PEnv_t(env);
      PCont_t c = PCont_t(e->fObject);
      e->fIterator.first = 0;
      e->fIterator.second = c->size() > 0 ? c->test(e->fIterator.first) : false;      // Iterator actually hold the value.
      e->fSize = c->size();
      return 0;
   }


   static void*
   next(void* env) {
      PEnv_t e = PEnv_t(env);
      PCont_t c = PCont_t(e->fObject);

      for ( ; e->fIdx > 0 && e->fIterator.first != c->size(); ++(e->fIterator.first), --e->fIdx) {}
      e->fIterator.second = (e->fIterator.first != c->size()) ? c->test(e->fIterator.first) : false;
      return 0;
   }


   static void*
   construct(void*,size_t) {
      // Nothing to construct.
      return 0;
   }


   static void*
   collect(void* env) {
      PEnv_t e = PEnv_t(env);
      PCont_t c = PCont_t(e->fObject);
      PValue_t m = PValue_t(e->fStart);    // 'start' is a buffer outside the container.

      for (size_t i = 0; i != c->size(); ++i, ++m) {
         *m = c->test(i);
      }
      return 0;
   }


   static void
   destruct(void*,size_t) {
      // Nothing to destruct.
   }


};

template <typename Bitset_t>
struct Pushback<StdBitSetHelper<Bitset_t> > : public CollType<StdBitSetHelper<Bitset_t> > {
   typedef Bitset_t Cont_t;
   typedef bool Iter_t;
   typedef bool 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 resize(void* /*obj*/, size_t) { }


   static void*
   feed(void* env) {
      PEnv_t e = PEnv_t(env);
      PCont_t c = PCont_t(e->fObject);
      PValue_t m = PValue_t(e->fStart);    // Here start is actually a 'buffer' outside the container.

      for (size_t i = 0; i < e->fSize; ++i, ++m) {
         c->set(i, *m);
      }
      return 0;
   }

   static void*
      feed(void* from, void* to, size_t size) {
      PValue_t m = PValue_t(from);
      PCont_t c  = PCont_t(to);

      for (size_t i = 0; i < size; ++i, ++m) {
         c->set(i, *m);
      }
      return 0;
   }


   static int
   value_offset() {
      return 0;
   }


};
#endif

template <typename B> struct Proxy<StdBitSetHelper<B> > {
   static CollFuncTable*
   Generate() {
      return CFTGenerator<Pushback<StdBitSetHelper<B> > >::Generate();
   }


};
}

#endif // Reflex_CollectionProxy
 CollectionProxy.h:1
 CollectionProxy.h:2
 CollectionProxy.h:3
 CollectionProxy.h:4
 CollectionProxy.h:5
 CollectionProxy.h:6
 CollectionProxy.h:7
 CollectionProxy.h:8
 CollectionProxy.h:9
 CollectionProxy.h:10
 CollectionProxy.h:11
 CollectionProxy.h:12
 CollectionProxy.h:13
 CollectionProxy.h:14
 CollectionProxy.h:15
 CollectionProxy.h:16
 CollectionProxy.h:17
 CollectionProxy.h:18
 CollectionProxy.h:19
 CollectionProxy.h:20
 CollectionProxy.h:21
 CollectionProxy.h:22
 CollectionProxy.h:23
 CollectionProxy.h:24
 CollectionProxy.h:25
 CollectionProxy.h:26
 CollectionProxy.h:27
 CollectionProxy.h:28
 CollectionProxy.h:29
 CollectionProxy.h:30
 CollectionProxy.h:31
 CollectionProxy.h:32
 CollectionProxy.h:33
 CollectionProxy.h:34
 CollectionProxy.h:35
 CollectionProxy.h:36
 CollectionProxy.h:37
 CollectionProxy.h:38
 CollectionProxy.h:39
 CollectionProxy.h:40
 CollectionProxy.h:41
 CollectionProxy.h:42
 CollectionProxy.h:43
 CollectionProxy.h:44
 CollectionProxy.h:45
 CollectionProxy.h:46
 CollectionProxy.h:47
 CollectionProxy.h:48
 CollectionProxy.h:49
 CollectionProxy.h:50
 CollectionProxy.h:51
 CollectionProxy.h:52
 CollectionProxy.h:53
 CollectionProxy.h:54
 CollectionProxy.h:55
 CollectionProxy.h:56
 CollectionProxy.h:57
 CollectionProxy.h:58
 CollectionProxy.h:59
 CollectionProxy.h:60
 CollectionProxy.h:61
 CollectionProxy.h:62
 CollectionProxy.h:63
 CollectionProxy.h:64
 CollectionProxy.h:65
 CollectionProxy.h:66
 CollectionProxy.h:67
 CollectionProxy.h:68
 CollectionProxy.h:69
 CollectionProxy.h:70
 CollectionProxy.h:71
 CollectionProxy.h:72
 CollectionProxy.h:73
 CollectionProxy.h:74
 CollectionProxy.h:75
 CollectionProxy.h:76
 CollectionProxy.h:77
 CollectionProxy.h:78
 CollectionProxy.h:79
 CollectionProxy.h:80
 CollectionProxy.h:81
 CollectionProxy.h:82
 CollectionProxy.h:83
 CollectionProxy.h:84
 CollectionProxy.h:85
 CollectionProxy.h:86
 CollectionProxy.h:87
 CollectionProxy.h:88
 CollectionProxy.h:89
 CollectionProxy.h:90
 CollectionProxy.h:91
 CollectionProxy.h:92
 CollectionProxy.h:93
 CollectionProxy.h:94
 CollectionProxy.h:95
 CollectionProxy.h:96
 CollectionProxy.h:97
 CollectionProxy.h:98
 CollectionProxy.h:99
 CollectionProxy.h:100
 CollectionProxy.h:101
 CollectionProxy.h:102
 CollectionProxy.h:103
 CollectionProxy.h:104
 CollectionProxy.h:105
 CollectionProxy.h:106
 CollectionProxy.h:107
 CollectionProxy.h:108
 CollectionProxy.h:109
 CollectionProxy.h:110
 CollectionProxy.h:111
 CollectionProxy.h:112
 CollectionProxy.h:113
 CollectionProxy.h:114
 CollectionProxy.h:115
 CollectionProxy.h:116
 CollectionProxy.h:117
 CollectionProxy.h:118
 CollectionProxy.h:119
 CollectionProxy.h:120
 CollectionProxy.h:121
 CollectionProxy.h:122
 CollectionProxy.h:123
 CollectionProxy.h:124
 CollectionProxy.h:125
 CollectionProxy.h:126
 CollectionProxy.h:127
 CollectionProxy.h:128
 CollectionProxy.h:129
 CollectionProxy.h:130
 CollectionProxy.h:131
 CollectionProxy.h:132
 CollectionProxy.h:133
 CollectionProxy.h:134
 CollectionProxy.h:135
 CollectionProxy.h:136
 CollectionProxy.h:137
 CollectionProxy.h:138
 CollectionProxy.h:139
 CollectionProxy.h:140
 CollectionProxy.h:141
 CollectionProxy.h:142
 CollectionProxy.h:143
 CollectionProxy.h:144
 CollectionProxy.h:145
 CollectionProxy.h:146
 CollectionProxy.h:147
 CollectionProxy.h:148
 CollectionProxy.h:149
 CollectionProxy.h:150
 CollectionProxy.h:151
 CollectionProxy.h:152
 CollectionProxy.h:153
 CollectionProxy.h:154
 CollectionProxy.h:155
 CollectionProxy.h:156
 CollectionProxy.h:157
 CollectionProxy.h:158
 CollectionProxy.h:159
 CollectionProxy.h:160
 CollectionProxy.h:161
 CollectionProxy.h:162
 CollectionProxy.h:163
 CollectionProxy.h:164
 CollectionProxy.h:165
 CollectionProxy.h:166
 CollectionProxy.h:167
 CollectionProxy.h:168
 CollectionProxy.h:169
 CollectionProxy.h:170
 CollectionProxy.h:171
 CollectionProxy.h:172
 CollectionProxy.h:173
 CollectionProxy.h:174
 CollectionProxy.h:175
 CollectionProxy.h:176
 CollectionProxy.h:177
 CollectionProxy.h:178
 CollectionProxy.h:179
 CollectionProxy.h:180
 CollectionProxy.h:181
 CollectionProxy.h:182
 CollectionProxy.h:183
 CollectionProxy.h:184
 CollectionProxy.h:185
 CollectionProxy.h:186
 CollectionProxy.h:187
 CollectionProxy.h:188
 CollectionProxy.h:189
 CollectionProxy.h:190
 CollectionProxy.h:191
 CollectionProxy.h:192
 CollectionProxy.h:193
 CollectionProxy.h:194
 CollectionProxy.h:195
 CollectionProxy.h:196
 CollectionProxy.h:197
 CollectionProxy.h:198
 CollectionProxy.h:199
 CollectionProxy.h:200
 CollectionProxy.h:201
 CollectionProxy.h:202
 CollectionProxy.h:203
 CollectionProxy.h:204
 CollectionProxy.h:205
 CollectionProxy.h:206
 CollectionProxy.h:207
 CollectionProxy.h:208
 CollectionProxy.h:209
 CollectionProxy.h:210
 CollectionProxy.h:211
 CollectionProxy.h:212
 CollectionProxy.h:213
 CollectionProxy.h:214
 CollectionProxy.h:215
 CollectionProxy.h:216
 CollectionProxy.h:217
 CollectionProxy.h:218
 CollectionProxy.h:219
 CollectionProxy.h:220
 CollectionProxy.h:221
 CollectionProxy.h:222
 CollectionProxy.h:223
 CollectionProxy.h:224
 CollectionProxy.h:225
 CollectionProxy.h:226
 CollectionProxy.h:227
 CollectionProxy.h:228
 CollectionProxy.h:229
 CollectionProxy.h:230
 CollectionProxy.h:231
 CollectionProxy.h:232
 CollectionProxy.h:233
 CollectionProxy.h:234
 CollectionProxy.h:235
 CollectionProxy.h:236
 CollectionProxy.h:237
 CollectionProxy.h:238
 CollectionProxy.h:239
 CollectionProxy.h:240
 CollectionProxy.h:241
 CollectionProxy.h:242
 CollectionProxy.h:243
 CollectionProxy.h:244
 CollectionProxy.h:245
 CollectionProxy.h:246
 CollectionProxy.h:247
 CollectionProxy.h:248
 CollectionProxy.h:249
 CollectionProxy.h:250
 CollectionProxy.h:251
 CollectionProxy.h:252
 CollectionProxy.h:253
 CollectionProxy.h:254
 CollectionProxy.h:255
 CollectionProxy.h:256
 CollectionProxy.h:257
 CollectionProxy.h:258
 CollectionProxy.h:259
 CollectionProxy.h:260
 CollectionProxy.h:261
 CollectionProxy.h:262
 CollectionProxy.h:263
 CollectionProxy.h:264
 CollectionProxy.h:265
 CollectionProxy.h:266
 CollectionProxy.h:267
 CollectionProxy.h:268
 CollectionProxy.h:269
 CollectionProxy.h:270
 CollectionProxy.h:271
 CollectionProxy.h:272
 CollectionProxy.h:273
 CollectionProxy.h:274
 CollectionProxy.h:275
 CollectionProxy.h:276
 CollectionProxy.h:277
 CollectionProxy.h:278
 CollectionProxy.h:279
 CollectionProxy.h:280
 CollectionProxy.h:281
 CollectionProxy.h:282
 CollectionProxy.h:283
 CollectionProxy.h:284
 CollectionProxy.h:285
 CollectionProxy.h:286
 CollectionProxy.h:287
 CollectionProxy.h:288
 CollectionProxy.h:289
 CollectionProxy.h:290
 CollectionProxy.h:291
 CollectionProxy.h:292
 CollectionProxy.h:293
 CollectionProxy.h:294
 CollectionProxy.h:295
 CollectionProxy.h:296
 CollectionProxy.h:297
 CollectionProxy.h:298
 CollectionProxy.h:299
 CollectionProxy.h:300
 CollectionProxy.h:301
 CollectionProxy.h:302
 CollectionProxy.h:303
 CollectionProxy.h:304
 CollectionProxy.h:305
 CollectionProxy.h:306
 CollectionProxy.h:307
 CollectionProxy.h:308
 CollectionProxy.h:309
 CollectionProxy.h:310
 CollectionProxy.h:311
 CollectionProxy.h:312
 CollectionProxy.h:313
 CollectionProxy.h:314
 CollectionProxy.h:315
 CollectionProxy.h:316
 CollectionProxy.h:317
 CollectionProxy.h:318
 CollectionProxy.h:319
 CollectionProxy.h:320
 CollectionProxy.h:321
 CollectionProxy.h:322
 CollectionProxy.h:323
 CollectionProxy.h:324
 CollectionProxy.h:325
 CollectionProxy.h:326
 CollectionProxy.h:327
 CollectionProxy.h:328
 CollectionProxy.h:329
 CollectionProxy.h:330
 CollectionProxy.h:331
 CollectionProxy.h:332
 CollectionProxy.h:333
 CollectionProxy.h:334
 CollectionProxy.h:335
 CollectionProxy.h:336
 CollectionProxy.h:337
 CollectionProxy.h:338
 CollectionProxy.h:339
 CollectionProxy.h:340
 CollectionProxy.h:341
 CollectionProxy.h:342
 CollectionProxy.h:343
 CollectionProxy.h:344
 CollectionProxy.h:345
 CollectionProxy.h:346
 CollectionProxy.h:347
 CollectionProxy.h:348
 CollectionProxy.h:349
 CollectionProxy.h:350
 CollectionProxy.h:351
 CollectionProxy.h:352
 CollectionProxy.h:353
 CollectionProxy.h:354
 CollectionProxy.h:355
 CollectionProxy.h:356
 CollectionProxy.h:357
 CollectionProxy.h:358
 CollectionProxy.h:359
 CollectionProxy.h:360
 CollectionProxy.h:361
 CollectionProxy.h:362
 CollectionProxy.h:363
 CollectionProxy.h:364
 CollectionProxy.h:365
 CollectionProxy.h:366
 CollectionProxy.h:367
 CollectionProxy.h:368
 CollectionProxy.h:369
 CollectionProxy.h:370
 CollectionProxy.h:371
 CollectionProxy.h:372
 CollectionProxy.h:373
 CollectionProxy.h:374
 CollectionProxy.h:375
 CollectionProxy.h:376
 CollectionProxy.h:377
 CollectionProxy.h:378
 CollectionProxy.h:379
 CollectionProxy.h:380
 CollectionProxy.h:381
 CollectionProxy.h:382
 CollectionProxy.h:383
 CollectionProxy.h:384
 CollectionProxy.h:385
 CollectionProxy.h:386
 CollectionProxy.h:387
 CollectionProxy.h:388
 CollectionProxy.h:389
 CollectionProxy.h:390
 CollectionProxy.h:391
 CollectionProxy.h:392
 CollectionProxy.h:393
 CollectionProxy.h:394
 CollectionProxy.h:395
 CollectionProxy.h:396
 CollectionProxy.h:397
 CollectionProxy.h:398
 CollectionProxy.h:399
 CollectionProxy.h:400
 CollectionProxy.h:401
 CollectionProxy.h:402
 CollectionProxy.h:403
 CollectionProxy.h:404
 CollectionProxy.h:405
 CollectionProxy.h:406
 CollectionProxy.h:407
 CollectionProxy.h:408
 CollectionProxy.h:409
 CollectionProxy.h:410
 CollectionProxy.h:411
 CollectionProxy.h:412
 CollectionProxy.h:413
 CollectionProxy.h:414
 CollectionProxy.h:415
 CollectionProxy.h:416
 CollectionProxy.h:417
 CollectionProxy.h:418
 CollectionProxy.h:419
 CollectionProxy.h:420
 CollectionProxy.h:421
 CollectionProxy.h:422
 CollectionProxy.h:423
 CollectionProxy.h:424
 CollectionProxy.h:425
 CollectionProxy.h:426
 CollectionProxy.h:427
 CollectionProxy.h:428
 CollectionProxy.h:429
 CollectionProxy.h:430
 CollectionProxy.h:431
 CollectionProxy.h:432
 CollectionProxy.h:433
 CollectionProxy.h:434
 CollectionProxy.h:435
 CollectionProxy.h:436
 CollectionProxy.h:437
 CollectionProxy.h:438
 CollectionProxy.h:439
 CollectionProxy.h:440
 CollectionProxy.h:441
 CollectionProxy.h:442
 CollectionProxy.h:443
 CollectionProxy.h:444
 CollectionProxy.h:445
 CollectionProxy.h:446
 CollectionProxy.h:447
 CollectionProxy.h:448
 CollectionProxy.h:449
 CollectionProxy.h:450
 CollectionProxy.h:451
 CollectionProxy.h:452
 CollectionProxy.h:453
 CollectionProxy.h:454
 CollectionProxy.h:455
 CollectionProxy.h:456
 CollectionProxy.h:457
 CollectionProxy.h:458
 CollectionProxy.h:459
 CollectionProxy.h:460
 CollectionProxy.h:461
 CollectionProxy.h:462
 CollectionProxy.h:463
 CollectionProxy.h:464
 CollectionProxy.h:465
 CollectionProxy.h:466
 CollectionProxy.h:467
 CollectionProxy.h:468
 CollectionProxy.h:469
 CollectionProxy.h:470
 CollectionProxy.h:471
 CollectionProxy.h:472
 CollectionProxy.h:473
 CollectionProxy.h:474
 CollectionProxy.h:475
 CollectionProxy.h:476
 CollectionProxy.h:477
 CollectionProxy.h:478
 CollectionProxy.h:479
 CollectionProxy.h:480
 CollectionProxy.h:481
 CollectionProxy.h:482
 CollectionProxy.h:483
 CollectionProxy.h:484
 CollectionProxy.h:485
 CollectionProxy.h:486
 CollectionProxy.h:487
 CollectionProxy.h:488
 CollectionProxy.h:489
 CollectionProxy.h:490
 CollectionProxy.h:491
 CollectionProxy.h:492
 CollectionProxy.h:493
 CollectionProxy.h:494
 CollectionProxy.h:495
 CollectionProxy.h:496
 CollectionProxy.h:497
 CollectionProxy.h:498
 CollectionProxy.h:499
 CollectionProxy.h:500
 CollectionProxy.h:501
 CollectionProxy.h:502
 CollectionProxy.h:503
 CollectionProxy.h:504
 CollectionProxy.h:505
 CollectionProxy.h:506
 CollectionProxy.h:507
 CollectionProxy.h:508
 CollectionProxy.h:509
 CollectionProxy.h:510
 CollectionProxy.h:511
 CollectionProxy.h:512
 CollectionProxy.h:513
 CollectionProxy.h:514
 CollectionProxy.h:515
 CollectionProxy.h:516
 CollectionProxy.h:517
 CollectionProxy.h:518
 CollectionProxy.h:519
 CollectionProxy.h:520
 CollectionProxy.h:521
 CollectionProxy.h:522
 CollectionProxy.h:523
 CollectionProxy.h:524
 CollectionProxy.h:525
 CollectionProxy.h:526
 CollectionProxy.h:527
 CollectionProxy.h:528
 CollectionProxy.h:529
 CollectionProxy.h:530
 CollectionProxy.h:531
 CollectionProxy.h:532
 CollectionProxy.h:533
 CollectionProxy.h:534
 CollectionProxy.h:535
 CollectionProxy.h:536
 CollectionProxy.h:537
 CollectionProxy.h:538
 CollectionProxy.h:539
 CollectionProxy.h:540
 CollectionProxy.h:541
 CollectionProxy.h:542
 CollectionProxy.h:543
 CollectionProxy.h:544
 CollectionProxy.h:545
 CollectionProxy.h:546
 CollectionProxy.h:547
 CollectionProxy.h:548
 CollectionProxy.h:549
 CollectionProxy.h:550
 CollectionProxy.h:551
 CollectionProxy.h:552
 CollectionProxy.h:553
 CollectionProxy.h:554
 CollectionProxy.h:555
 CollectionProxy.h:556
 CollectionProxy.h:557
 CollectionProxy.h:558
 CollectionProxy.h:559
 CollectionProxy.h:560
 CollectionProxy.h:561
 CollectionProxy.h:562
 CollectionProxy.h:563
 CollectionProxy.h:564
 CollectionProxy.h:565
 CollectionProxy.h:566
 CollectionProxy.h:567
 CollectionProxy.h:568
 CollectionProxy.h:569
 CollectionProxy.h:570
 CollectionProxy.h:571
 CollectionProxy.h:572
 CollectionProxy.h:573
 CollectionProxy.h:574
 CollectionProxy.h:575
 CollectionProxy.h:576
 CollectionProxy.h:577
 CollectionProxy.h:578
 CollectionProxy.h:579
 CollectionProxy.h:580
 CollectionProxy.h:581
 CollectionProxy.h:582
 CollectionProxy.h:583
 CollectionProxy.h:584
 CollectionProxy.h:585
 CollectionProxy.h:586
 CollectionProxy.h:587
 CollectionProxy.h:588
 CollectionProxy.h:589
 CollectionProxy.h:590
 CollectionProxy.h:591
 CollectionProxy.h:592
 CollectionProxy.h:593
 CollectionProxy.h:594
 CollectionProxy.h:595
 CollectionProxy.h:596
 CollectionProxy.h:597
 CollectionProxy.h:598
 CollectionProxy.h:599
 CollectionProxy.h:600
 CollectionProxy.h:601
 CollectionProxy.h:602
 CollectionProxy.h:603
 CollectionProxy.h:604
 CollectionProxy.h:605
 CollectionProxy.h:606
 CollectionProxy.h:607
 CollectionProxy.h:608
 CollectionProxy.h:609
 CollectionProxy.h:610
 CollectionProxy.h:611
 CollectionProxy.h:612
 CollectionProxy.h:613
 CollectionProxy.h:614
 CollectionProxy.h:615
 CollectionProxy.h:616
 CollectionProxy.h:617
 CollectionProxy.h:618
 CollectionProxy.h:619
 CollectionProxy.h:620
 CollectionProxy.h:621
 CollectionProxy.h:622
 CollectionProxy.h:623
 CollectionProxy.h:624
 CollectionProxy.h:625
 CollectionProxy.h:626
 CollectionProxy.h:627
 CollectionProxy.h:628
 CollectionProxy.h:629
 CollectionProxy.h:630
 CollectionProxy.h:631
 CollectionProxy.h:632
 CollectionProxy.h:633
 CollectionProxy.h:634
 CollectionProxy.h:635
 CollectionProxy.h:636
 CollectionProxy.h:637
 CollectionProxy.h:638
 CollectionProxy.h:639
 CollectionProxy.h:640
 CollectionProxy.h:641
 CollectionProxy.h:642
 CollectionProxy.h:643
 CollectionProxy.h:644
 CollectionProxy.h:645
 CollectionProxy.h:646
 CollectionProxy.h:647
 CollectionProxy.h:648
 CollectionProxy.h:649
 CollectionProxy.h:650
 CollectionProxy.h:651
 CollectionProxy.h:652
 CollectionProxy.h:653
 CollectionProxy.h:654
 CollectionProxy.h:655
 CollectionProxy.h:656
 CollectionProxy.h:657
 CollectionProxy.h:658
 CollectionProxy.h:659
 CollectionProxy.h:660
 CollectionProxy.h:661
 CollectionProxy.h:662
 CollectionProxy.h:663
 CollectionProxy.h:664
 CollectionProxy.h:665
 CollectionProxy.h:666
 CollectionProxy.h:667
 CollectionProxy.h:668
 CollectionProxy.h:669
 CollectionProxy.h:670
 CollectionProxy.h:671
 CollectionProxy.h:672
 CollectionProxy.h:673
 CollectionProxy.h:674
 CollectionProxy.h:675
 CollectionProxy.h:676
 CollectionProxy.h:677
 CollectionProxy.h:678
 CollectionProxy.h:679
 CollectionProxy.h:680
 CollectionProxy.h:681
 CollectionProxy.h:682
 CollectionProxy.h:683
 CollectionProxy.h:684
 CollectionProxy.h:685
 CollectionProxy.h:686
 CollectionProxy.h:687
 CollectionProxy.h:688
 CollectionProxy.h:689
 CollectionProxy.h:690
 CollectionProxy.h:691
 CollectionProxy.h:692
 CollectionProxy.h:693
 CollectionProxy.h:694
 CollectionProxy.h:695
 CollectionProxy.h:696
 CollectionProxy.h:697
 CollectionProxy.h:698
 CollectionProxy.h:699
 CollectionProxy.h:700
 CollectionProxy.h:701
 CollectionProxy.h:702
 CollectionProxy.h:703
 CollectionProxy.h:704
 CollectionProxy.h:705
 CollectionProxy.h:706
 CollectionProxy.h:707
 CollectionProxy.h:708
 CollectionProxy.h:709
 CollectionProxy.h:710
 CollectionProxy.h:711
 CollectionProxy.h:712
 CollectionProxy.h:713
 CollectionProxy.h:714
 CollectionProxy.h:715
 CollectionProxy.h:716
 CollectionProxy.h:717
 CollectionProxy.h:718
 CollectionProxy.h:719
 CollectionProxy.h:720
 CollectionProxy.h:721
 CollectionProxy.h:722
 CollectionProxy.h:723
 CollectionProxy.h:724
 CollectionProxy.h:725
 CollectionProxy.h:726
 CollectionProxy.h:727
 CollectionProxy.h:728
 CollectionProxy.h:729
 CollectionProxy.h:730
 CollectionProxy.h:731
 CollectionProxy.h:732
 CollectionProxy.h:733
 CollectionProxy.h:734
 CollectionProxy.h:735
 CollectionProxy.h:736
 CollectionProxy.h:737
 CollectionProxy.h:738
 CollectionProxy.h:739
 CollectionProxy.h:740
 CollectionProxy.h:741
 CollectionProxy.h:742
 CollectionProxy.h:743