Back
doAssoc (clj)
(source)interface
(doAssoc level node i val)
Examples
clojure/core.rrb-vector
(ns clojure.core.rrb-vector.transients
(:require [clojure.core.rrb-vector.parameters :as p]
[clojure.core.rrb-vector.nodes :refer [ranges last-range
overflow?]])
(:import (clojure.core.rrb_vector.nodes NodeManager)
(clojure.core ArrayManager)
(java.util.concurrent.atomic AtomicReference)))
(definterface ITransientHelper
(editableRoot [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
root])
(editableTail [^clojure.core.ArrayManager am
tail])
(ensureEditable [^clojure.core.rrb_vector.nodes.NodeManager nm
root])
(ensureEditable [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
^int shift])
(pushTail [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^int cnt
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
tail-node])
(popTail [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^int cnt
^java.util.concurrent.atomic.AtomicReference root-edit
current-node])
(doAssoc [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
^int i
val])
(newPath [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
tail
^java.util.concurrent.atomic.AtomicReference edit
^int shift
current-node]))
:else
(let [arr (.array nm ret)
child (aget ^objects arr subidx)]
(aset ^objects arr subidx nil)
(aset rngs subidx 0)
(aset rngs 32 (unchecked-dec-int (aget rngs 32)))
ret))))))
(doAssoc [this nm am shift root-edit current-node i val]
(let [ret (.ensureEditable this nm am root-edit current-node shift)]
(if (.regular nm ret)
(loop [shift shift
node ret]
(if (zero? shift)
(let [arr (.array nm node)]
(.aset am arr (bit-and i 0x1f) val))
(let [arr (.array nm node)
subidx (bit-and (bit-shift-right i shift) 0x1f)
next-shift (int (unchecked-subtract-int shift 5))
child (.ensureEditable this nm am
root-edit
(aget ^objects arr subidx)
next-shift)]
(aset ^objects arr subidx child)
(recur next-shift child))))
(let [arr (.array nm ret)
rngs (ranges nm ret)
subidx (bit-and (bit-shift-right i shift) 0x1f)
subidx (loop [subidx subidx]
(if (< i (aget rngs subidx))
subidx
(recur (unchecked-inc-int subidx))))
i (if (zero? subidx)
i
(unchecked-subtract-int
i (aget rngs (unchecked-dec-int subidx))))]
(aset ^objects arr subidx
(.doAssoc this nm am
(unchecked-subtract-int shift 5)
root-edit
(aget ^objects arr subidx)
i
val))))
ret))
clojure/core.rrb-vector
(ns clojure.core.rrb-vector.transients
(:require [clojure.core.rrb-vector.parameters :as p]
[clojure.core.rrb-vector.nodes :refer [ranges last-range
overflow?]])
(:import (clojure.core.rrb_vector.nodes NodeManager)
(clojure.core ArrayManager)
(java.util.concurrent.atomic AtomicReference)))
(definterface ITransientHelper
(editableRoot [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
root])
(editableTail [^clojure.core.ArrayManager am
tail])
(ensureEditable [^clojure.core.rrb_vector.nodes.NodeManager nm
root])
(ensureEditable [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
^int shift])
(pushTail [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^int cnt
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
tail-node])
(popTail [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^int cnt
^java.util.concurrent.atomic.AtomicReference root-edit
current-node])
(doAssoc [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
^int i
val])
(newPath [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
tail
^java.util.concurrent.atomic.AtomicReference edit
^int shift
current-node]))
:else
(let [arr (.array nm ret)
child (aget ^objects arr subidx)]
(aset ^objects arr subidx nil)
(aset rngs subidx 0)
(aset rngs p/max-branches (unchecked-dec-int (aget rngs p/max-branches)))
ret))))))
(doAssoc [this nm am shift root-edit current-node i val]
(let [ret (.ensureEditable this nm am root-edit current-node shift)]
(if (.regular nm ret)
(loop [shift shift
node ret]
(if (zero? shift)
(let [arr (.array nm node)]
(.aset am arr (bit-and i p/branch-mask) val))
(let [arr (.array nm node)
subidx (bit-and (bit-shift-right i shift) p/branch-mask)
next-shift (int (unchecked-subtract-int shift p/shift-increment))
child (.ensureEditable this nm am
root-edit
(aget ^objects arr subidx)
next-shift)]
(aset ^objects arr subidx child)
(recur next-shift child))))
(let [arr (.array nm ret)
rngs (ranges nm ret)
subidx (bit-and (bit-shift-right i shift) p/branch-mask)
subidx (loop [subidx subidx]
(if (< i (aget rngs subidx))
subidx
(recur (unchecked-inc-int subidx))))
i (if (zero? subidx)
i
(unchecked-subtract-int
i (aget rngs (unchecked-dec-int subidx))))]
(aset ^objects arr subidx
(.doAssoc this nm am
(unchecked-subtract-int shift p/shift-increment)
root-edit
(aget ^objects arr subidx)
i
val))))
ret))
datastax/fallout
(ns clojure.core.rrb-vector.transients
(:require [clojure.core.rrb-vector.nodes :refer [ranges last-range]])
(:import (clojure.core.rrb_vector.nodes NodeManager)
(clojure.core ArrayManager)
(java.util.concurrent.atomic AtomicReference)))
(definterface ITransientHelper
(editableRoot [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
root])
(editableTail [^clojure.core.ArrayManager am
tail])
(ensureEditable [^clojure.core.rrb_vector.nodes.NodeManager nm
root])
(ensureEditable [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
^int shift])
(pushTail [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^int cnt
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
tail-node])
(popTail [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^int cnt
^java.util.concurrent.atomic.AtomicReference root-edit
current-node])
(doAssoc [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
^int shift
^java.util.concurrent.atomic.AtomicReference root-edit
current-node
^int i
val])
(newPath [^clojure.core.rrb_vector.nodes.NodeManager nm
^clojure.core.ArrayManager am
tail
^java.util.concurrent.atomic.AtomicReference edit
^int shift
current-node]))
:else
(let [arr (.array nm ret)
child (aget ^objects arr subidx)]
(aset ^objects arr subidx nil)
(aset rngs subidx 0)
(aset rngs 32 (unchecked-dec-int (aget rngs 32)))
ret))))))
(doAssoc [this nm am shift root-edit current-node i val]
(let [ret (.ensureEditable this nm am root-edit current-node shift)]
(if (.regular nm ret)
(loop [shift shift
node ret]
(if (zero? shift)
(let [arr (.array nm node)]
(.aset am arr (bit-and i 0x1f) val))
(let [arr (.array nm node)
subidx (bit-and (bit-shift-right i shift) 0x1f)
child (.ensureEditable this nm am
root-edit
(aget ^objects arr subidx)
shift)]
(aset ^objects arr subidx child)
(recur (unchecked-subtract-int shift 5) child))))
(let [arr (.array nm ret)
rngs (ranges nm ret)
subidx (bit-and (bit-shift-right i shift) 0x1f)
subidx (loop [subidx subidx]
(if (< i (aget rngs subidx))
subidx
(recur (unchecked-inc-int subidx))))
i (if (zero? subidx)
i
(unchecked-subtract-int
i (aget rngs (unchecked-dec-int subidx))))]
(aset ^objects arr subidx
(.doAssoc this nm am
(unchecked-subtract-int shift 5)
root-edit
(aget ^objects arr subidx)
i
val))))
ret))