Elm  1.0
ELM is a library providing generic data structures, OS-independent interface, plugins and XML.
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
OrderedInitializer.h
1 /*
2  * $Id$
3  * Copyright (c) 2007 - IRIT-UPS <casse@irit.fr>
4  *
5  * OrderedInitializer class interface.
6  */
7 #ifndef ELM_UTIL_ORDERED_INITIALIZER_H
8 #define ELM_UTIL_ORDERED_INITIALIZER_H
9 
10 namespace elm {
11 
12 // OrderedInitializer class
13 template <class T>
15  typedef struct node_t {
16  struct node_t *next;
17  T *object;
18  inline node_t(T *_object, struct node_t *_next)
19  : object(_object), next(_next) { }
20  } node_t;
21 
22  static node_t *list;
23  static bool initialized;
24 public:
25  Initializer(bool start = true);
26  ~Initializer(void);
27  void record(T *object);
28  void startup(void);
29 };
30 
31 // Statics
32 template <class T> typename Initializer<T>::node_t *Initializer<T>::list = 0;
33 template <class T> bool Initializer<T>::initialized = false;
34 
35 // Initializer<T>::Initializer
36 template <class T>
37 Initializer<T>::Initializer(bool start) {
38  if(start)
39  startup();
40 }
41 
42 // Initializer<T>::~Initializer
43 template <class T>
45  for(node_t *node = list, *next; node; node = next) {
46  next = node->next;
47  delete node;
48  }
49 }
50 
51 // Initializer<T>::record
52 template <class T>
53 void Initializer<T>::record(T *object) {
54  if(initialized)
55  object->initialize();
56  else {
57  list = new node_t(object, list);
58  }
59 }
60 
61 // Initializer<T>::startup()
62 template <class T>
63 void Initializer<T>::startup(void) {
64  if(!initialized) {
65  initialized = true;
66  for(node_t *node = list, *next; node; node = next) {
67  next = node->next;
68  node->object->initialize();
69  delete node;
70  }
71  list = 0;
72  }
73 }
74 
75 } // elm
76 
77 #endif // ELM_UTIL_INITIALIZER_H
78 
void startup(void)
Definition: Initializer.h:63
void record(T *object)
Definition: OrderedInitializer.h:14
void record(T *object)
Definition: Initializer.h:53
Initializer(bool start=true)
Definition: Initializer.h:14
Initializer(bool start=true)
Definition: Initializer.h:37
~Initializer(void)
Definition: Initializer.h:44