MCPcopy Index your code
hub / github.com/clojure/clojure / pushTail

Method pushTail

src/jvm/clojure/lang/PersistentVector.java:251–272  ·  view source on GitHub ↗
(int level, Node parent, Node tailnode)

Source from the content-addressed store, hash-verified

249}
250
251private Node pushTail(int level, Node parent, Node tailnode){
252 //if parent is leaf, insert node,
253 // else does it map to an existing child? -> nodeToInsert = pushNode one more level
254 // else alloc new path
255 //return nodeToInsert placed in copy of parent
256 int subidx = ((cnt - 1) >>> level) & 0x01f;
257 Node ret = new Node(parent.edit, parent.array.clone());
258 Node nodeToInsert;
259 if(level == 5)
260 {
261 nodeToInsert = tailnode;
262 }
263 else
264 {
265 Node child = (Node) parent.array[subidx];
266 nodeToInsert = (child != null)?
267 pushTail(level-5,child, tailnode)
268 :newPath(root.edit,level-5, tailnode);
269 }
270 ret.array[subidx] = nodeToInsert;
271 return ret;
272}
273
274private static Node newPath(AtomicReference<Thread> edit,int level, Node node){
275 if(level == 0)

Callers 1

consMethod · 0.95

Calls 2

newPathMethod · 0.95
cloneMethod · 0.80

Tested by

no test coverage detected