MCPcopy Create free account
hub / github.com/immutable-js/immutable-js / updateOrderedMap

Function updateOrderedMap

src/OrderedMap.js:119–164  ·  view source on GitHub ↗
(omap, k, v)

Source from the content-addressed store, hash-verified

117}
118
119function updateOrderedMap(omap, k, v) {
120 const map = omap._map;
121 const list = omap._list;
122 const i = map.get(k);
123 const has = i !== undefined;
124 let newMap;
125 let newList;
126 if (v === NOT_SET) {
127 // removed
128 if (!has) {
129 return omap;
130 }
131 if (list.size >= SIZE && list.size >= map.size * 2) {
132 newList = list.filter((entry, idx) => entry !== undefined && i !== idx);
133 newMap = newList
134 .toKeyedSeq()
135 .map((entry) => entry[0])
136 .flip()
137 .toMap();
138 if (omap.__ownerID) {
139 newMap.__ownerID = newList.__ownerID = omap.__ownerID;
140 }
141 } else {
142 newMap = map.remove(k);
143 newList = i === list.size - 1 ? list.pop() : list.set(i, undefined);
144 }
145 } else if (has) {
146 if (v === list.get(i)[1]) {
147 return omap;
148 }
149 newMap = map;
150 newList = list.set(i, [k, v]);
151 } else {
152 newMap = map.set(k, list.size);
153 newList = list.set(list.size, [k, v]);
154 }
155 if (omap.__ownerID) {
156 omap.size = newMap.size;
157 omap._map = newMap;
158 omap._list = newList;
159 omap.__hash = undefined;
160 omap.__altered = true;
161 return omap;
162 }
163 return makeOrderedMap(newMap, newList);
164}

Callers 2

setMethod · 0.85
removeMethod · 0.85

Calls 10

makeOrderedMapFunction · 0.85
toMapMethod · 0.80
getMethod · 0.65
filterMethod · 0.65
flipMethod · 0.65
mapMethod · 0.65
toKeyedSeqMethod · 0.65
removeMethod · 0.65
popMethod · 0.65
setMethod · 0.65

Tested by

no test coverage detected