1 /**
2  *
3  *   Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU)
4  *   info_at_agrum_dot_org
5  *
6  *  This library is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU Lesser General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This library is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU Lesser General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Lesser General Public License
17  *  along with this library.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 
22 /** @file
23  * @brief Outlined implementation of Sets
24  *
25  * @author Christophe GONZALES(_at_AMU) and Pierre-Henri WUILLEMIN(_at_LIP6)
26  */
27 
28 #ifndef DOXYGEN_SHOULD_SKIP_THIS
29 
30 #  include <agrum/tools/core/set.h>
31 
32 namespace gum {
33 
34   // creates (if needed) and returns the iterator  _SetIterEndSafe_
endSafe4Statics()35   const SetIteratorSafe< int >* SetIteratorStaticEnd::endSafe4Statics() {
36     static bool first_time = true;
37 
38     if (first_time) {
39       first_time       = false;
40       _SetIterEndSafe_ = new SetIteratorSafe< int >;
41 #  ifdef GUM_DEBUG_MODE
42       __debug__::_dec_creation_("SetIteratorSafe",
43                                 " __set_static_end",
44                                 0,
45                                 "static variable correction",
46                                 0);
47       __debug__::_dec_creation_("HashTableConstIteratorSafe",
48                                 " __set_static_end",
49                                 0,
50                                 "static variable correction",
51                                 0);
52 #  endif
53     }
54 
55     return _SetIterEndSafe_;
56   }
57 
58   // creates (if needed) and returns the iterator  _SetIterEndSafe_
constEndSafe4Statics()59   const SetIteratorSafe< int >* SetIteratorStaticEnd::constEndSafe4Statics() {
60     return endSafe4Statics();
61   }
62 
63   // creates (if needed) and returns the iterator  _SetIterEnd_
end4Statics()64   const SetIterator< int >* SetIteratorStaticEnd::end4Statics() {
65     static bool first_time = true;
66 
67     if (first_time) {
68       first_time   = false;
69       _SetIterEnd_ = new SetIterator< int >;
70 #  ifdef GUM_DEBUG_MODE
71       __debug__::_dec_creation_("SetIterator",
72                                 " __set_static_end",
73                                 0,
74                                 "static variable correction",
75                                 0);
76       __debug__::_dec_creation_("HashTableConstIterator",
77                                 " __set_static_end",
78                                 0,
79                                 "static variable correction",
80                                 0);
81 #  endif
82     }
83 
84     return _SetIterEnd_;
85   }
86 
87   // creates (if needed) and returns the iterator  _SetIterEnd_
constEnd4Statics()88   const SetIterator< int >* SetIteratorStaticEnd::constEnd4Statics() { return end4Statics(); }
89 
90   // create the end iterator for all Sets
91   const SetIteratorSafe< int >* SetIteratorStaticEnd::_SetIterEndSafe_
92      = SetIteratorStaticEnd::endSafe4Statics();
93 
94   // create the end iterator for all Sets
95   const SetIterator< int >* SetIteratorStaticEnd::_SetIterEnd_
96      = SetIteratorStaticEnd::end4Statics();
97 
98 } /* namespace gum */
99 
100 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
101 
102 
103 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
104 #  ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
105 #    ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
106 #      ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
107 #        ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
108 #          ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
109 template class gum::Set< int >;
110 #          endif
111 #        endif
112 #      endif
113 #    endif
114 #  endif
115 #endif
116 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
117 #  ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
118 #    ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
119 #      ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
120 #        ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
121 #          ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
122 template class gum::Set< long >;
123 #          endif
124 #        endif
125 #      endif
126 #    endif
127 #  endif
128 #endif
129 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
130 #  ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
131 #    ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
132 #      ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
133 #        ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
134 #          ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
135 template class gum::Set< unsigned int >;
136 #          endif
137 #        endif
138 #      endif
139 #    endif
140 #  endif
141 #endif
142 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
143 #  ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
144 #    ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
145 #      ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
146 #        ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
147 #          ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
148 template class gum::Set< unsigned long >;
149 #          endif
150 #        endif
151 #      endif
152 #    endif
153 #  endif
154 #endif
155 
156 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
157 #  ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
158 #    ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
159 #      ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
160 #        ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
161 #          ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
162 template class gum::Set< double >;
163 #          endif
164 #        endif
165 #      endif
166 #    endif
167 #  endif
168 #endif
169 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
170 #  ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
171 #    ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
172 #      ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
173 #        ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
174 #          ifndef GUM_NO_EXTERN_TEMPLATE_CLASS
175 template class gum::Set< std::string >;
176 #          endif
177 #        endif
178 #      endif
179 #    endif
180 #  endif
181 #endif
182