24 #ifndef _UTILS_CONSTRAINTS_DEPENDENCY_ONETOMANY_H_
25 #define _UTILS_CONSTRAINTS_DEPENDENCY_ONETOMANY_H_
27 #include <utils/constraints/dependency.h>
49 template <
class Prov
ider,
class Dependant>
50 class OneToManyDependency
56 virtual void add(Provider *p);
57 virtual void add(Dependant *d);
58 virtual void remove(Provider *p);
59 virtual void remove(Dependant *d);
61 virtual bool can_add(Provider *p);
62 virtual bool can_add(Dependant *d);
71 std::list<Dependant *> _dependants;
75 template <
class Prov
ider,
class Dependant>
83 template <
class Prov
ider,
class Dependant>
95 template <
class Prov
ider,
class Dependant>
99 if ((_provider != 0) && (p != _provider)) {
112 template <
class Prov
ider,
class Dependant>
116 if (_provider == 0) {
117 throw DependencyViolationException(
"No provider set, cannot accept dependant");
119 _dependants.push_back(d);
128 template <
class Prov
ider,
class Dependant>
132 if (!_dependants.empty()) {
133 throw DependencyViolationException(
"There are still dependants of provider, "
134 "cannot accept removal of provider");
143 template <
class Prov
ider,
class Dependant>
148 _dependants.remove(d);
156 template <
class Prov
ider,
class Dependant>
160 return ((_provider == 0) || (p == _provider));
167 template <
class Prov
ider,
class Dependant>
171 return (_provider != 0);
178 template <
class Prov
ider,
class Dependant>
182 return _dependants.empty();
189 template <
class Prov
ider,
class Dependant>
199 template <
class Prov
ider,
class Dependant>
209 template <
class Prov
ider,
class Dependant>
210 std::list<Dependant *> &