Skip to content

Commit 45e34d2

Browse files
committed
revert additions to master. Keep ObjMap removed for now.
1 parent 89506d4 commit 45e34d2

File tree

1 file changed

+0
-342
lines changed

1 file changed

+0
-342
lines changed

src/main/cljs/cljs/core.cljs

Lines changed: 0 additions & 342 deletions
Original file line numberDiff line numberDiff line change
@@ -12243,345 +12243,3 @@ reduces them without incurring seq initialization"
1224312243
(identical? "window" *global*) (set! goog/global js/window)
1224412244
(identical? "self" *global*) (set! goog/global js/self)
1224512245
(identical? "global" *global*) (set! goog/global js/global)))
12246-
12247-
;; -----------------------------------------------------------------------------
12248-
;; Original 2011 Copy-on-Write Types
12249-
12250-
;;; Vector
12251-
12252-
(deftype Vector [meta array]
12253-
IWithMeta
12254-
(-with-meta [coll meta] (Vector. meta array))
12255-
12256-
IMeta
12257-
(-meta [coll] meta)
12258-
12259-
IStack
12260-
(-peek [coll]
12261-
(let [count (.-length array)]
12262-
(when (> count 0)
12263-
(aget array (dec count)))))
12264-
(-pop [coll]
12265-
(if (> (.-length array) 0)
12266-
(let [new-array (aclone array)]
12267-
(. new-array (pop))
12268-
(Vector. meta new-array))
12269-
(throw (js/Error. "Can't pop empty vector"))))
12270-
12271-
ICollection
12272-
(-conj [coll o]
12273-
(let [new-array (aclone array)]
12274-
(.push new-array o)
12275-
(Vector. meta new-array)))
12276-
12277-
IEmptyableCollection
12278-
(-empty [coll] (with-meta cljs.core.Vector/EMPTY meta))
12279-
12280-
ISequential
12281-
IEquiv
12282-
(-equiv [coll other] (equiv-sequential coll other))
12283-
12284-
IHash
12285-
(-hash [coll] (hash-coll coll))
12286-
12287-
ISeqable
12288-
(-seq [coll]
12289-
(when (> (.-length array) 0)
12290-
(let [vector-seq
12291-
(fn vector-seq [i]
12292-
(lazy-seq
12293-
(when (< i (.-length array))
12294-
(cons (aget array i) (vector-seq (inc i))))))]
12295-
(vector-seq 0))))
12296-
12297-
ICounted
12298-
(-count [coll] (.-length array))
12299-
12300-
IIndexed
12301-
(-nth [coll n]
12302-
(if (and (<= 0 n) (< n (.-length array)))
12303-
(aget array n)
12304-
#_(throw (js/Error. (str "No item " n " in vector of length " (.-length array))))))
12305-
(-nth [coll n not-found]
12306-
(if (and (<= 0 n) (< n (.-length array)))
12307-
(aget array n)
12308-
not-found))
12309-
12310-
ILookup
12311-
(-lookup [coll k] (-nth coll k nil))
12312-
(-lookup [coll k not-found] (-nth coll k not-found))
12313-
12314-
IAssociative
12315-
(-assoc [coll k v]
12316-
(let [new-array (aclone array)]
12317-
(aset new-array k v)
12318-
(Vector. meta new-array)))
12319-
12320-
IVector
12321-
(-assoc-n [coll n val] (-assoc coll n val))
12322-
12323-
IReduce
12324-
(-reduce [v f]
12325-
(ci-reduce array f))
12326-
(-reduce [v f start]
12327-
(ci-reduce array f start))
12328-
12329-
IFn
12330-
(-invoke [coll k]
12331-
(-lookup coll k))
12332-
(-invoke [coll k not-found]
12333-
(-lookup coll k not-found)))
12334-
12335-
(set! (. Vector -EMPTY) (Vector. nil (array)))
12336-
12337-
(set! (. Vector -fromArray) (fn [xs] (Vector. nil xs)))
12338-
12339-
; The keys field is an array of all keys of this map, in no particular
12340-
; order. Any string, keyword, or symbol key is used as a property name
12341-
; to store the value in strobj. If a key is assoc'ed when that same
12342-
; key already exists in strobj, the old value is overwritten. If a
12343-
; non-string key is assoc'ed, return a HashMap object instead.
12344-
12345-
(defn- obj-map-contains-key?
12346-
([k strobj]
12347-
(obj-map-contains-key? k strobj true false))
12348-
([k strobj true-val false-val]
12349-
(if (and (goog/isString k) (.hasOwnProperty strobj k))
12350-
true-val
12351-
false-val)))
12352-
12353-
(defn- obj-map-compare-keys [a b]
12354-
(let [a (hash a)
12355-
b (hash b)]
12356-
(cond
12357-
(< a b) -1
12358-
(> a b) 1
12359-
:else 0)))
12360-
12361-
(deftype ObjMap [meta keys strobj]
12362-
IWithMeta
12363-
(-with-meta [coll meta] (ObjMap. meta keys strobj))
12364-
12365-
IMeta
12366-
(-meta [coll] meta)
12367-
12368-
ICollection
12369-
(-conj [coll entry]
12370-
(if (vector? entry)
12371-
(-assoc coll (-nth entry 0) (-nth entry 1))
12372-
(reduce -conj
12373-
coll
12374-
entry)))
12375-
12376-
IEmptyableCollection
12377-
(-empty [coll] (with-meta cljs.core.ObjMap/EMPTY meta))
12378-
12379-
IEquiv
12380-
(-equiv [coll other] (equiv-map coll other))
12381-
12382-
IHash
12383-
(-hash [coll] (hash-coll coll))
12384-
12385-
ISeqable
12386-
(-seq [coll]
12387-
(when (pos? (.-length keys))
12388-
(map #(vector % (aget strobj %))
12389-
(.sort keys obj-map-compare-keys))))
12390-
12391-
ICounted
12392-
(-count [coll] (.-length keys))
12393-
12394-
ILookup
12395-
(-lookup [coll k] (-lookup coll k nil))
12396-
(-lookup [coll k not-found]
12397-
(obj-map-contains-key? k strobj (aget strobj k) not-found))
12398-
12399-
IAssociative
12400-
(-assoc [coll k v]
12401-
(if (goog/isString k)
12402-
(let [new-strobj (goog.object/clone strobj)
12403-
overwrite? (.hasOwnProperty new-strobj k)]
12404-
(aset new-strobj k v)
12405-
(if overwrite?
12406-
(ObjMap. meta keys new-strobj) ; overwrite
12407-
(let [new-keys (aclone keys)] ; append
12408-
(.push new-keys k)
12409-
(ObjMap. meta new-keys new-strobj))))
12410-
; non-string key. game over.
12411-
(with-meta (into (hash-map k v) (seq coll)) meta)))
12412-
(-contains-key? [coll k]
12413-
(obj-map-contains-key? k strobj))
12414-
12415-
IMap
12416-
(-dissoc [coll k]
12417-
(if (and (goog/isString k) (.hasOwnProperty strobj k))
12418-
(let [new-keys (aclone keys)
12419-
new-strobj (goog.object/clone strobj)]
12420-
(.splice new-keys (scan-array 1 k new-keys) 1)
12421-
(js-delete new-strobj k)
12422-
(ObjMap. meta new-keys new-strobj))
12423-
coll)) ; key not found, return coll unchanged
12424-
12425-
IFn
12426-
(-invoke [coll k]
12427-
(-lookup coll k))
12428-
(-invoke [coll k not-found]
12429-
(-lookup coll k not-found)))
12430-
12431-
(set! (. ObjMap -EMPTY) (ObjMap. nil (array) (js-obj)))
12432-
12433-
(set! (. ObjMap -fromObject) (fn [ks obj] (ObjMap. nil ks obj)))
12434-
12435-
; The keys field is an array of all keys of this map, in no particular
12436-
; order. Each key is hashed and the result used as a property name of
12437-
; hashobj. Each values in hashobj is actually a bucket in order to handle hash
12438-
; collisions. A bucket is an array of alternating keys (not their hashes) and
12439-
; vals.
12440-
(deftype HashMap [meta count hashobj]
12441-
IWithMeta
12442-
(-with-meta [coll meta] (HashMap. meta count hashobj))
12443-
12444-
IMeta
12445-
(-meta [coll] meta)
12446-
12447-
ICollection
12448-
(-conj [coll entry]
12449-
(if (vector? entry)
12450-
(-assoc coll (-nth entry 0) (-nth entry 1))
12451-
(reduce -conj
12452-
coll
12453-
entry)))
12454-
12455-
IEmptyableCollection
12456-
(-empty [coll] (with-meta cljs.core.HashMap/EMPTY meta))
12457-
12458-
IEquiv
12459-
(-equiv [coll other] (equiv-map coll other))
12460-
12461-
IHash
12462-
(-hash [coll] (hash-coll coll))
12463-
12464-
ISeqable
12465-
(-seq [coll]
12466-
(when (pos? count)
12467-
(let [hashes (.sort (js-keys hashobj))]
12468-
(mapcat #(map vec (partition 2 (aget hashobj %)))
12469-
hashes))))
12470-
12471-
ICounted
12472-
(-count [coll] count)
12473-
12474-
ILookup
12475-
(-lookup [coll k] (-lookup coll k nil))
12476-
(-lookup [coll k not-found]
12477-
(let [bucket (aget hashobj (hash k))
12478-
i (when bucket (scan-array 2 k bucket))]
12479-
(if i
12480-
(aget bucket (inc i))
12481-
not-found)))
12482-
12483-
IAssociative
12484-
(-assoc [coll k v]
12485-
(let [h (hash k)
12486-
bucket (aget hashobj h)]
12487-
(if bucket
12488-
(let [new-bucket (aclone bucket)
12489-
new-hashobj (goog.object/clone hashobj)]
12490-
(aset new-hashobj h new-bucket)
12491-
(if-let [i (scan-array 2 k new-bucket)]
12492-
(do ; found key, replace
12493-
(aset new-bucket (inc i) v)
12494-
(HashMap. meta count new-hashobj))
12495-
(do ; did not find key, append
12496-
(.push new-bucket k v)
12497-
(HashMap. meta (inc count) new-hashobj))))
12498-
(let [new-hashobj (goog.object/clone hashobj)] ; did not find bucket
12499-
(aset new-hashobj h (array k v))
12500-
(HashMap. meta (inc count) new-hashobj)))))
12501-
(-contains-key? [coll k]
12502-
(let [bucket (aget hashobj (hash k))
12503-
i (when bucket (scan-array 2 k bucket))]
12504-
(if i
12505-
true
12506-
false)))
12507-
12508-
IMap
12509-
(-dissoc [coll k]
12510-
(let [h (hash k)
12511-
bucket (aget hashobj h)
12512-
i (when bucket (scan-array 2 k bucket))]
12513-
(if (not i)
12514-
coll ; key not found, return coll unchanged
12515-
(let [new-hashobj (goog.object/clone hashobj)]
12516-
(if (> 3 (.-length bucket))
12517-
(js-delete new-hashobj h)
12518-
(let [new-bucket (aclone bucket)]
12519-
(.splice new-bucket i 2)
12520-
(aset new-hashobj h new-bucket)))
12521-
(HashMap. meta (dec count) new-hashobj)))))
12522-
12523-
IFn
12524-
(-invoke [coll k]
12525-
(-lookup coll k))
12526-
(-invoke [coll k not-found]
12527-
(-lookup coll k not-found)))
12528-
12529-
(set! (. HashMap -EMPTY) (HashMap. nil 0 (js-obj)))
12530-
12531-
(set! cljs.core.HashMap/fromArrays (fn [ks vs]
12532-
(let [len (.-length ks)]
12533-
(loop [i 0, out cljs.core.HashMap/EMPTY]
12534-
(if (< i len)
12535-
(recur (inc i) (assoc out (aget ks i) (aget vs i)))
12536-
out)))))
12537-
12538-
(deftype Set [meta hash-map]
12539-
IWithMeta
12540-
(-with-meta [coll meta] (Set. meta hash-map))
12541-
12542-
IMeta
12543-
(-meta [coll] meta)
12544-
12545-
ICollection
12546-
(-conj [coll o]
12547-
(Set. meta (assoc hash-map o nil)))
12548-
12549-
IEmptyableCollection
12550-
(-empty [coll] (with-meta cljs.core.Set/EMPTY meta))
12551-
12552-
IEquiv
12553-
(-equiv [coll other]
12554-
(and
12555-
(set? other)
12556-
(= (count coll) (count other))
12557-
(every? #(contains? coll %)
12558-
other)))
12559-
12560-
IHash
12561-
(-hash [coll] (hash-coll coll))
12562-
12563-
ISeqable
12564-
(-seq [coll] (keys hash-map))
12565-
12566-
ICounted
12567-
(-count [coll] (count (seq coll)))
12568-
12569-
ILookup
12570-
(-lookup [coll v]
12571-
(-lookup coll v nil))
12572-
(-lookup [coll v not-found]
12573-
(if (-contains-key? hash-map v)
12574-
v
12575-
not-found))
12576-
12577-
ISet
12578-
(-disjoin [coll v]
12579-
(Set. meta (dissoc hash-map v)))
12580-
12581-
IFn
12582-
(-invoke [coll k]
12583-
(-lookup coll k))
12584-
(-invoke [coll k not-found]
12585-
(-lookup coll k not-found)))
12586-
12587-
(set! (. Set -EMPTY) (Set. nil (hash-map)))

0 commit comments

Comments
 (0)