OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library observe.src.observable_map; | 5 library observe.src.observable_map; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'package:observe/observe.dart'; | 8 import 'package:observe/observe.dart'; |
9 | 9 |
10 | 10 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 | 98 |
99 @reflectable bool get isNotEmpty => !isEmpty; | 99 @reflectable bool get isNotEmpty => !isEmpty; |
100 | 100 |
101 @reflectable bool containsValue(Object value) => _map.containsValue(value); | 101 @reflectable bool containsValue(Object value) => _map.containsValue(value); |
102 | 102 |
103 @reflectable bool containsKey(Object key) => _map.containsKey(key); | 103 @reflectable bool containsKey(Object key) => _map.containsKey(key); |
104 | 104 |
105 @reflectable V operator [](Object key) => _map[key]; | 105 @reflectable V operator [](Object key) => _map[key]; |
106 | 106 |
107 @reflectable void operator []=(K key, V value) { | 107 @reflectable void operator []=(K key, V value) { |
| 108 if (!hasObservers) { |
| 109 _map[key] = value; |
| 110 return; |
| 111 } |
| 112 |
108 int len = _map.length; | 113 int len = _map.length; |
109 V oldValue = _map[key]; | 114 V oldValue = _map[key]; |
| 115 |
110 _map[key] = value; | 116 _map[key] = value; |
111 if (hasObservers) { | 117 |
112 if (len != _map.length) { | 118 if (len != _map.length) { |
113 notifyPropertyChange(#length, len, _map.length); | 119 notifyPropertyChange(#length, len, _map.length); |
114 notifyChange(new MapChangeRecord.insert(key, value)); | 120 notifyChange(new MapChangeRecord.insert(key, value)); |
115 } else if (oldValue != value) { | 121 } else if (oldValue != value) { |
116 notifyChange(new MapChangeRecord(key, oldValue, value)); | 122 notifyChange(new MapChangeRecord(key, oldValue, value)); |
117 } | |
118 } | 123 } |
119 } | 124 } |
120 | 125 |
121 void addAll(Map<K, V> other) { | 126 void addAll(Map<K, V> other) { |
122 other.forEach((K key, V value) { this[key] = value; }); | 127 other.forEach((K key, V value) { this[key] = value; }); |
123 } | 128 } |
124 | 129 |
125 V putIfAbsent(K key, V ifAbsent()) { | 130 V putIfAbsent(K key, V ifAbsent()) { |
126 int len = _map.length; | 131 int len = _map.length; |
127 V result = _map.putIfAbsent(key, ifAbsent); | 132 V result = _map.putIfAbsent(key, ifAbsent); |
(...skipping 22 matching lines...) Expand all Loading... |
150 }); | 155 }); |
151 notifyPropertyChange(#length, len, 0); | 156 notifyPropertyChange(#length, len, 0); |
152 } | 157 } |
153 _map.clear(); | 158 _map.clear(); |
154 } | 159 } |
155 | 160 |
156 void forEach(void f(K key, V value)) => _map.forEach(f); | 161 void forEach(void f(K key, V value)) => _map.forEach(f); |
157 | 162 |
158 String toString() => Maps.mapToString(this); | 163 String toString() => Maps.mapToString(this); |
159 } | 164 } |
OLD | NEW |