| 838 | } |
| 839 | |
| 840 | void set(V const& v, bool triggerIfSame = false) { |
| 841 | Reference<ThreadSingleAssignmentVar<Void>> trigger(new ThreadSingleAssignmentVar<Void>()); |
| 842 | |
| 843 | lock.enter(); |
| 844 | bool changed = this->value != v; |
| 845 | if (changed || triggerIfSame) { |
| 846 | std::swap(this->nextChange, trigger); |
| 847 | this->value = v; |
| 848 | } |
| 849 | lock.leave(); |
| 850 | |
| 851 | if (changed || triggerIfSame) { |
| 852 | trigger->send(Void()); |
| 853 | } |
| 854 | } |
| 855 | |
| 856 | private: |
| 857 | V value; |