@@ -37,7 +37,8 @@ class MarkerLayer
3737 @persistent = options ? .persistent ? false
3838 @emitter = new Emitter
3939 @index = new MarkerIndex
40- @markersById = {}
40+ @markersById = new Map
41+ @markers = []
4142 @markersIdsWithChangeSubscriptions = new Set
4243 @createdMarkers = new Set
4344 @destroyedMarkers = new Set
@@ -51,7 +52,7 @@ class MarkerLayer
5152 # locations.
5253 copy : ->
5354 copy = @delegate .addMarkerLayer ({@maintainHistory })
54- for markerId, marker of @markersById
55+ @markersById . forEach (marker, id) =>
5556 snapshot = marker .getSnapshot (null )
5657 copy .createMarker (marker .getRange (), marker .getSnapshot ())
5758 copy
@@ -78,19 +79,21 @@ class MarkerLayer
7879 #
7980 # Returns a {Marker}.
8081 getMarker : (id ) ->
81- @markersById [id]
82+ @markersById . get (id)
8283
8384 # Public: Get all existing markers on the marker layer.
8485 #
8586 # Returns an {Array} of {Marker}s.
8687 getMarkers : ->
87- marker for id, marker of @markersById
88+ markers = []
89+ @markersById .forEach (marker) -> markers .push (marker)
90+ markers
8891
8992 # Public: Get the number of markers in the marker layer.
9093 #
9194 # Returns a {Number}.
9295 getMarkerCount : ->
93- Object . keys ( @markersById ). length
96+ @markersById . size
9497
9598 # Public: Find markers in the layer conforming to the given parameters.
9699 #
@@ -129,13 +132,17 @@ class MarkerLayer
129132 continue
130133 delete params[key]
131134
132- markerIds ?= new Set (Object .keys (@markersById ))
133-
134135 result = []
135- markerIds .forEach (markerId) =>
136- marker = @markersById [markerId]
137- return unless marker .matchesParams (params)
138- result .push (marker)
136+ if markerIds?
137+ markerIds .forEach (markerId) =>
138+ marker = @markersById .get (markerId)
139+ if marker .matchesParams (params)
140+ result .push (marker)
141+ else
142+ @markersById .forEach (marker) =>
143+ if marker .matchesParams (params)
144+ result .push (marker)
145+
139146 result .sort (a, b) -> a .compare (b)
140147
141148 ###
@@ -256,7 +263,7 @@ class MarkerLayer
256263 splice : (start , oldExtent , newExtent ) ->
257264 invalidated = @index .splice (start, oldExtent, newExtent)
258265 invalidated .touch .forEach (id) =>
259- marker = @markersById [id]
266+ marker = @markersById . get (id)
260267 @touchedMarkers .add (id)
261268 if invalidated[marker .getInvalidationStrategy ()]? .has (id)
262269 if @destroyInvalidatedMarkers
@@ -269,40 +276,38 @@ class MarkerLayer
269276 return unless snapshots?
270277
271278 snapshotIds = Object .keys (snapshots)
272- existingMarkerIds = Object . keys (@markersById )
279+ existingMarkerIds = Array . from (@markersById . keys () )
273280
274281 for id in snapshotIds
275282 snapshot = snapshots[id]
276- if marker = @markersById [id]
283+ if marker = @markersById . get ( parseInt (id))
277284 marker .update (marker .getRange (), snapshot, true )
278285 else
279286 newMarker = @ createMarker (snapshot .range , snapshot)
280287
281288 for id in existingMarkerIds
282- if (marker = @markersById [id] ) and (not snapshots[id]? )
289+ if (marker = @markersById . get ( parseInt (id)) ) and (not snapshots[id]? )
283290 marker .destroy ()
284291
285292 @delegate .markersUpdated (this )
286293
287294 createSnapshot : ->
288295 result = {}
289296 ranges = @index .dump ()
290- for id in Object .keys (@markersById )
291- marker = @markersById [id]
297+ @markersById .forEach (marker, id) =>
292298 result[id] = marker .getSnapshot (Range .fromObject (ranges[id]), false )
293299 result
294300
295301 emitChangeEvents : (snapshot ) ->
296302 @markersIdsWithChangeSubscriptions .forEach (id) =>
297- if marker = @markersById [id] # event handlers could destroy markers
303+ if marker = @markersById . get (id) # event handlers could destroy markers
298304 marker .emitChangeEvent (snapshot? [id]? .range , true , false )
299305 @delegate .markersUpdated (this )
300306
301307 serialize : ->
302308 ranges = @index .dump ()
303309 markersById = {}
304- for id in Object .keys (@markersById )
305- marker = @markersById [id]
310+ @markersById .forEach (marker, id) =>
306311 markersById[id] = marker .getSnapshot (Range .fromObject (ranges[id]), false )
307312 {@id , @maintainHistory , @persistent , markersById, version : SerializationVersion}
308313
@@ -314,7 +319,7 @@ class MarkerLayer
314319 for id, markerState of state .markersById
315320 range = Range .fromObject (markerState .range )
316321 delete markerState .range
317- @ addMarker (id , range, markerState)
322+ @ addMarker (parseInt (id) , range, markerState)
318323 return
319324
320325 ###
@@ -327,8 +332,8 @@ class MarkerLayer
327332 @delegate .markersUpdated (this )
328333
329334 destroyMarker : (id ) ->
330- if @markersById .hasOwnProperty (id)
331- delete @markersById [id]
335+ if @markersById .has (id)
336+ @markersById . delete (id)
332337 @markersIdsWithChangeSubscriptions .delete (id)
333338 @index .delete (id)
334339 @destroyedMarkers .add (id)
@@ -375,7 +380,9 @@ class MarkerLayer
375380 Point .assertValid (range .start )
376381 Point .assertValid (range .end )
377382 @index .insert (id, range .start , range .end )
378- @markersById [id] = new Marker (id, this , range, params)
383+ marker = new Marker (id, this , range, params)
384+ @markersById .set (id, marker)
385+ marker
379386
380387 setDisableDidUpdateEvent : (@didUpdateEventDisabled ) ->
381388
0 commit comments