2 /* { dg-timeout-factor 2.0 } */
7 template <class T, class U>
20 typename T1 = NullType, typename T2 = NullType, typename T3 =
22 typename T4 = NullType, typename T5 = NullType, typename T6 =
24 typename T7 = NullType, typename T8 = NullType, typename T9 =
26 typename T10 = NullType, typename T11 = NullType, typename T12
28 typename T13 = NullType, typename T14 = NullType, typename T15
30 typename T16 = NullType, typename T17 = NullType, typename T18
32 typename T19 = NullType, typename T20 = NullType, typename T21
34 typename T22 = NullType, typename T23 = NullType, typename T24
36 typename T25 = NullType, typename T26 = NullType, typename T27
38 typename T28 = NullType, typename T29 = NullType, typename T30
40 typename T31 = NullType, typename T32 = NullType, typename T33
42 typename T34 = NullType, typename T35 = NullType, typename T36
44 typename T37 = NullType, typename T38 = NullType, typename T39
46 typename T40 = NullType
51 typedef typename MakeTypelist
70 typedef Typelist<T1, TailResult> Result;
76 typedef NullType Result;
84 template <class Key, bool iW>
97 template <class Key, bool isWrite>
98 class CreatorUnitBaseImpl
101 typedef Context<Key, isWrite> Context_;
103 typedef void*(CreatorUnitBaseImpl::*CreateFun)(Context_&, unsigned&, const
105 CreateFun createFun_;
108 virtual void* createUninitialized () = 0;
109 template <class Value>
110 void* createImpl (Context_& ctx, unsigned& ver, const Key& k)
112 return createUninitialized();
115 CreatorUnitBaseImpl();
117 template <class Value>
118 CreatorUnitBaseImpl (Value*) :
119 createFun_( &CreatorUnitBaseImpl::template createImpl<Value> )
123 virtual ~CreatorUnitBaseImpl () {}
125 CreatorUnitBaseImpl(const CreatorUnitBaseImpl& s)
126 : createFun_(s.createFun_)
130 CreatorUnitBaseImpl& operator=(const CreatorUnitBaseImpl& s)
132 createFun_ = s.createFun_;
135 void* create (Context_& ctx, unsigned& ver, const Key& k)
137 return (this->*createFun_)(ctx, ver, k);
142 class Creator : protected CreatorUnitBaseImpl<Key, true>, protected
143 CreatorUnitBaseImpl<Key, false>
146 typedef void* (*CreatorFun) ();
151 virtual void* createUninitialized ()
160 template <class Value>
161 Creator (CreatorFun f, Value*) :
162 CreatorUnitBaseImpl<Key, true>((Value*)0),
163 CreatorUnitBaseImpl<Key, false>((Value*)0),
168 Creator(const Creator& s) :
169 CreatorUnitBaseImpl<Key, true>(s),
170 CreatorUnitBaseImpl<Key, false>(s),
176 Creator& operator=(const Creator& s)
178 CreatorUnitBaseImpl<Key, true>::operator=(s);
179 CreatorUnitBaseImpl<Key, false>::operator=(s);
188 template <class Context>
189 void* createObject (Context& ctx, unsigned& ver, const Key& k)
191 void* r = CreatorUnitBaseImpl<Key, Context::isWrite>::create(ctx, ver,
204 typedef void* (*CreatorFun) ();
205 typedef detail::Creator<Key> Creator;
210 template <class Value>
211 bool registerCreator (const Key& k, CreatorFun fun)
215 template <class Context>
216 void* createObject (const Key& k, Context& ctx, unsigned& ver)
222 template <class Key, class Base, Key key>
226 typedef Base BaseType;
227 enum {KeyValue = key};
230 template <class Key, class T>
233 template <class Key, class Base, Key key>
234 class Serializer<Key, ClassSpec <Key, Base, key> >
235 : public virtual Factory<Key>
238 typedef Base BaseType;
239 enum {KeyValue = key};
240 typedef Factory<Key> Inherited;
241 typedef Serializer<Key, ClassSpec< Key, Base, key > > SelfType;
243 static void* create ()
245 return (void*) (new BaseType);
250 Inherited::template registerCreator<BaseType>(
256 template <class Key, class Head>
257 class Serializer<Key, Loki::Typelist<Head, Loki::NullType> >:
258 public Serializer<Key, Head>
262 template <class Key, class Head, class Tail>
263 class Serializer<Key, Loki::Typelist<Head, Tail> >:
264 public virtual Serializer<Key, Head>,
265 public virtual Serializer<Key, Tail>
270 class Serializer<Key, Loki::NullType> : public virtual Factory<Key>
277 typedef unsigned KeyType;
281 typedef Factory<KeyType> FactoryType;
287 template <class Context>
288 bool serialize(Context& ctx, unsigned& ver)
292 static Key classId() { return 1; }
293 static const char* className () {return "A001";}
298 template <class Context>
299 bool serialize(Context& ctx, unsigned& ver)
303 static Key classId() { return 2; }
304 static const char* className () {return "A002";}
309 template <class Context>
310 bool serialize(Context& ctx, unsigned& ver)
314 static Key classId() { return 3; }
315 static const char* className () {return "A003";}
320 template <class Context>
321 bool serialize(Context& ctx, unsigned& ver)
325 static Key classId() { return 4; }
326 static const char* className () {return "A004";}
331 template <class Context>
332 bool serialize(Context& ctx, unsigned& ver)
336 static Key classId() { return 5; }
337 static const char* className () {return "A005";}
342 template <class Context>
343 bool serialize(Context& ctx, unsigned& ver)
347 static Key classId() { return 6; }
348 static const char* className () {return "A006";}
353 template <class Context>
354 bool serialize(Context& ctx, unsigned& ver)
358 static Key classId() { return 7; }
359 static const char* className () {return "A007";}
364 template <class Context>
365 bool serialize(Context& ctx, unsigned& ver)
369 static Key classId() { return 8; }
370 static const char* className () {return "A008";}
375 template <class Context>
376 bool serialize(Context& ctx, unsigned& ver)
380 static Key classId() { return 9; }
381 static const char* className () {return "A009";}
386 template <class Context>
387 bool serialize(Context& ctx, unsigned& ver)
391 static Key classId() { return 10; }
392 static const char* className () {return "A010";}
397 template <class Context>
398 bool serialize(Context& ctx, unsigned& ver)
402 static Key classId() { return 11; }
403 static const char* className () {return "A011";}
408 template <class Context>
409 bool serialize(Context& ctx, unsigned& ver)
413 static Key classId() { return 12; }
414 static const char* className () {return "A012";}
419 template <class Context>
420 bool serialize(Context& ctx, unsigned& ver)
424 static Key classId() { return 13; }
425 static const char* className () {return "A013";}
430 template <class Context>
431 bool serialize(Context& ctx, unsigned& ver)
435 static Key classId() { return 14; }
436 static const char* className () {return "A014";}
441 template <class Context>
442 bool serialize(Context& ctx, unsigned& ver)
446 static Key classId() { return 15; }
447 static const char* className () {return "A015";}
452 template <class Context>
453 bool serialize(Context& ctx, unsigned& ver)
457 static Key classId() { return 16; }
458 static const char* className () {return "A016";}
463 template <class Context>
464 bool serialize(Context& ctx, unsigned& ver)
468 static Key classId() { return 17; }
469 static const char* className () {return "A017";}
474 template <class Context>
475 bool serialize(Context& ctx, unsigned& ver)
479 static Key classId() { return 18; }
480 static const char* className () {return "A018";}
485 template <class Context>
486 bool serialize(Context& ctx, unsigned& ver)
490 static Key classId() { return 19; }
491 static const char* className () {return "A019";}
496 template <class Context>
497 bool serialize(Context& ctx, unsigned& ver)
501 static Key classId() { return 20; }
502 static const char* className () {return "A020";}
507 template <class Context>
508 bool serialize(Context& ctx, unsigned& ver)
512 static Key classId() { return 21; }
513 static const char* className () {return "A021";}
518 template <class Context>
519 bool serialize(Context& ctx, unsigned& ver)
523 static Key classId() { return 22; }
524 static const char* className () {return "A022";}
529 template <class Context>
530 bool serialize(Context& ctx, unsigned& ver)
534 static Key classId() { return 23; }
535 static const char* className () {return "A023";}
540 template <class Context>
541 bool serialize(Context& ctx, unsigned& ver)
545 static Key classId() { return 24; }
546 static const char* className () {return "A024";}
551 template <class Context>
552 bool serialize(Context& ctx, unsigned& ver)
556 static Key classId() { return 25; }
557 static const char* className () {return "A025";}
562 template <class Context>
563 bool serialize(Context& ctx, unsigned& ver)
567 static Key classId() { return 26; }
568 static const char* className () {return "A026";}
573 template <class Context>
574 bool serialize(Context& ctx, unsigned& ver)
578 static Key classId() { return 27; }
579 static const char* className () {return "A027";}
584 template <class Context>
585 bool serialize(Context& ctx, unsigned& ver)
589 static Key classId() { return 28; }
590 static const char* className () {return "A028";}
595 template <class Context>
596 bool serialize(Context& ctx, unsigned& ver)
600 static Key classId() { return 29; }
601 static const char* className () {return "A029";}
606 template <class Context>
607 bool serialize(Context& ctx, unsigned& ver)
611 static Key classId() { return 30; }
612 static const char* className () {return "A030";}
617 template <class Context>
618 bool serialize(Context& ctx, unsigned& ver)
622 static Key classId() { return 31; }
623 static const char* className () {return "A031";}
628 template <class Context>
629 bool serialize(Context& ctx, unsigned& ver)
633 static Key classId() { return 32; }
634 static const char* className () {return "A032";}
639 template <class Context>
640 bool serialize(Context& ctx, unsigned& ver)
644 static Key classId() { return 33; }
645 static const char* className () {return "A033";}
650 template <class Context>
651 bool serialize(Context& ctx, unsigned& ver)
655 static Key classId() { return 34; }
656 static const char* className () {return "A034";}
661 template <class Context>
662 bool serialize(Context& ctx, unsigned& ver)
666 static Key classId() { return 35; }
667 static const char* className () {return "A035";}
672 template <class Context>
673 bool serialize(Context& ctx, unsigned& ver)
677 static Key classId() { return 36; }
678 static const char* className () {return "A036";}
683 template <class Context>
684 bool serialize(Context& ctx, unsigned& ver)
688 static Key classId() { return 37; }
689 static const char* className () {return "A037";}
694 template <class Context>
695 bool serialize(Context& ctx, unsigned& ver)
699 static Key classId() { return 38; }
700 static const char* className () {return "A038";}
705 template <class Context>
706 bool serialize(Context& ctx, unsigned& ver)
710 static Key classId() { return 39; }
711 static const char* className () {return "A039";}
716 template <class Context>
717 bool serialize(Context& ctx, unsigned& ver)
721 static Key classId() { return 40; }
722 static const char* className () {return "A040";}
725 Factory<Key>& getInstance()
727 static Serializer<Key,
728 Loki::TL::MakeTypelist<
729 ClassSpec<Key, A001, 1>,
730 ClassSpec<Key, A002, 2>,
731 ClassSpec<Key, A003, 3>,
732 ClassSpec<Key, A004, 4>,
733 ClassSpec<Key, A005, 5>,
734 ClassSpec<Key, A006, 6>,
735 ClassSpec<Key, A007, 7>,
736 ClassSpec<Key, A008, 8>,
737 ClassSpec<Key, A009, 9>,
738 ClassSpec<Key, A010, 10>,
739 ClassSpec<Key, A011, 11>,
740 ClassSpec<Key, A012, 12>,
741 ClassSpec<Key, A013, 13>,
742 ClassSpec<Key, A014, 14>,
743 ClassSpec<Key, A015, 15>,
744 ClassSpec<Key, A016, 16>,
745 ClassSpec<Key, A017, 17>,
746 ClassSpec<Key, A018, 18>,
747 ClassSpec<Key, A019, 19>,
748 ClassSpec<Key, A020, 20>,
749 ClassSpec<Key, A021, 21>,
750 ClassSpec<Key, A022, 22>,
751 ClassSpec<Key, A023, 23>,
752 ClassSpec<Key, A024, 24>,
753 ClassSpec<Key, A025, 25>,
754 ClassSpec<Key, A026, 26>,
755 ClassSpec<Key, A027, 27>,
756 ClassSpec<Key, A028, 28>,
757 ClassSpec<Key, A029, 29>,
758 ClassSpec<Key, A030, 30>,
759 ClassSpec<Key, A031, 31>,
760 ClassSpec<Key, A032, 32>,
761 ClassSpec<Key, A033, 33>,
762 ClassSpec<Key, A034, 34>,
763 ClassSpec<Key, A035, 35>,
764 ClassSpec<Key, A036, 36>,
765 ClassSpec<Key, A037, 37>,
766 ClassSpec<Key, A038, 38>,
767 ClassSpec<Key, A039, 39>,
768 ClassSpec<Key, A040, 40>