11 #ifndef smtk_common_update_Factory_h
12 #define smtk_common_update_Factory_h
14 #include "smtk/string/Token.h"
18 #include <unordered_map>
42 template<
typename UpdaterSignature>
54 std::size_t appliesToVersionMin,
55 std::size_t appliesToVersionMax,
56 std::size_t producesVersion,
57 UpdaterSignature update)
77 operator bool()
const {
return this->
isValid(); }
85 std::size_t resultElementVersion,
86 std::size_t inputElementVersion);
96 std::size_t appliesToVersionMin,
97 std::size_t appliesToVersionMax,
98 std::size_t producesVersion,
99 UpdaterSignature updater);
102 std::unordered_map<smtk::string::Token, std::set<Entry>> m_entries;
105 template<
typename UpdaterSignature>
113 template<
typename UpdaterSignature>
123 &this->Update < &other.
Update))))));
127 template<
typename UpdaterSignature>
130 std::size_t resultElementVersion,
131 std::size_t inputElementVersion)
134 auto eit = m_entries.find(elementSpec);
135 if (eit == m_entries.end())
141 for (
const auto& updater : eit->second)
143 if (!updater.isValid())
148 updater.AppliesToVersionMin <= inputElementVersion &&
149 updater.AppliesToVersionMax >= inputElementVersion &&
150 updater.ProducesVersion == resultElementVersion)
159 template<
typename UpdaterSignature>
162 std::set<std::size_t> versions;
163 auto eit = m_entries.find(elementSpec);
164 if (eit == m_entries.end())
168 for (
const auto& updater : eit->second)
170 if (!updater.isValid())
174 versions.insert(updater.ProducesVersion);
180 template<
typename UpdaterSignature>
183 std::set<std::size_t> versions;
184 auto eit = m_entries.find(elementSpec);
185 if (eit == m_entries.end())
189 for (
const auto& updater : eit->second)
191 if (!updater.isValid())
195 for (std::size_t vv = updater.AppliesToVersionMin; vv <= updater.AppliesToVersionMax; ++vv)
203 template<
typename UpdaterSignature>
206 std::size_t appliesToVersionMin,
207 std::size_t appliesToVersionMax,
208 std::size_t producesVersion,
209 UpdaterSignature update)
213 !update || target.
data().empty() || appliesToVersionMin > appliesToVersionMax ||
214 appliesToVersionMax >= producesVersion)
218 Entry ee(appliesToVersionMin, appliesToVersionMax, producesVersion, update);
219 m_entries[target].insert(ee);
227 #endif // smtk_common_update_Factory_h