Skip to content

Commit

Permalink
added support for marshalling java.lang.Floats and supported array types
Browse files Browse the repository at this point in the history
  • Loading branch information
cdorrat committed Jan 31, 2011
1 parent adeae8d commit 94799d1
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 7 deletions.
4 changes: 2 additions & 2 deletions project.clj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(defproject cupboard "1.0.0-SNAPSHOT"
:description "An embedded database library for Clojure."
:repositories {"oracle" "http://download.oracle.com/maven"}
:dependencies [[org.clojure/clojure "1.1.0"]
[org.clojure/clojure-contrib "1.1.0"]
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]
[com.sleepycat/je "4.0.92"]
[joda-time "1.6"]])
37 changes: 33 additions & 4 deletions src/cupboard/bdb/je_marshal.clj
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
(ns cupboard.bdb.je-marshal
(:use cupboard.utils)
(:import [org.joda.time DateTime LocalDate LocalTime LocalDateTime DateTimeZone])
(:import [com.sleepycat.je DatabaseEntry OperationStatus]
[com.sleepycat.bind.tuple TupleBinding TupleInput TupleOutput]))
Expand All @@ -15,6 +14,7 @@
java.math.BigInteger
clojure.lang.Ratio
java.lang.Double
java.lang.Float
java.lang.String
java.util.Date
org.joda.time.DateTime
Expand All @@ -28,7 +28,16 @@
:vector
:seq
:map
:set])
:set
(class (boolean-array []))
(class (byte-array []))
(class (char-array []))
(class (double-array []))
(class (float-array []))
(class (int-array []))
(class (long-array []))
(class (object-array []))
(class (short-array []))])

(def *clj-type-codes* (zipmap *clj-types* (range 0 (count *clj-types*))))

Expand Down Expand Up @@ -67,6 +76,7 @@
(marshal-write tuple-output (.numerator data))
(marshal-write tuple-output (.denominator data))))
(def-marshal-write java.lang.Double .writeSortedDouble)
(def-marshal-write java.lang.Float .writeSortedFloat)
(def-marshal-write java.lang.String .writeString)
(def-marshal-write java.util.Date
(fn [#^TupleOutput tuple-output #^java.util.Date data]
Expand Down Expand Up @@ -99,7 +109,16 @@
(def-marshal-write :list seq-write)
(def-marshal-write :vector seq-write)
(def-marshal-write :seq seq-write)
(def-marshal-write :set seq-write))
(def-marshal-write :set seq-write)
(def-marshal-write (class (boolean-array [])) seq-write)
(def-marshal-write (class (byte-array [])) seq-write)
(def-marshal-write (class (char-array [])) seq-write)
(def-marshal-write (class (double-array [])) seq-write)
(def-marshal-write (class (float-array [])) seq-write)
(def-marshal-write (class (int-array [])) seq-write)
(def-marshal-write (class (long-array [])) seq-write)
(def-marshal-write (class (object-array [])) seq-write)
(def-marshal-write (class (short-array [])) seq-write))
(def-marshal-write :map
(fn [tuple-output data]
(marshal-write tuple-output (count data))
Expand Down Expand Up @@ -152,6 +171,7 @@
(unmarshal-read tuple-input)
(unmarshal-read tuple-input))))
(def-unmarshal-read java.lang.Double .readSortedDouble)
(def-unmarshal-read java.lang.Float .readSortedFloat)
(def-unmarshal-read java.lang.String .readString)
(def-unmarshal-read java.util.Date
(fn [#^TupleInput tuple-input]
Expand Down Expand Up @@ -187,7 +207,16 @@
(def-unmarshal-read :list (seq-read-fn (list) reverse))
(def-unmarshal-read :seq (seq-read-fn (list) reverse))
(def-unmarshal-read :vector (seq-read-fn [] identity))
(def-unmarshal-read :set (seq-read-fn #{} identity)))
(def-unmarshal-read :set (seq-read-fn #{} identity))
(def-unmarshal-read (class (boolean-array [])) (seq-read-fn [] boolean-array))
(def-unmarshal-read (class (byte-array [])) (seq-read-fn [] byte-array))
(def-unmarshal-read (class (char-array [])) (seq-read-fn [] char-array))
(def-unmarshal-read (class (double-array []))(seq-read-fn [] double-array))
(def-unmarshal-read (class (float-array []))(seq-read-fn [] float-array))
(def-unmarshal-read (class (int-array []))(seq-read-fn [] int-array))
(def-unmarshal-read (class (long-array []))(seq-read-fn [] long-array))
(def-unmarshal-read (class (object-array []))(seq-read-fn [] object-array))
(def-unmarshal-read (class (short-array []))(seq-read-fn [] short-array)))
(def-unmarshal-read :map
(fn [tuple-input]
(let [len (unmarshal-read tuple-input)]
Expand Down
16 changes: 15 additions & 1 deletion test/test/cupboard/bdb/je_marshal.clj
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
tlong (long 1)
tbigint (bigint 1)
tratio (/ 1 2)
tfloat (float 1)
tdouble 1.0
tstring "hello world"
tdate (java.util.Date.)
Expand All @@ -39,6 +40,7 @@
(is (= (unmarshal-db-entry (marshal-db-entry tlong)) tlong))
(is (= (unmarshal-db-entry (marshal-db-entry tbigint)) tbigint))
(is (= (unmarshal-db-entry (marshal-db-entry tratio)) tratio))
(is (= (unmarshal-db-entry (marshal-db-entry tfloat)) tfloat))
(is (= (unmarshal-db-entry (marshal-db-entry tdouble)) tdouble))
(is (= (unmarshal-db-entry (marshal-db-entry tstring)) tstring))
(is (= (unmarshal-db-entry (marshal-db-entry tdate)) tdate))
Expand All @@ -55,7 +57,19 @@
(is (= (unmarshal-db-entry (marshal-db-entry tmap)) tmap))
(is (= (unmarshal-db-entry (marshal-db-entry tset)) tset))))


(deftest java-array-marshalling
(are [x] (every? true? (map = x (unmarshal-db-entry (marshal-db-entry x))))
(boolean-array [true false])
(byte-array [(byte 13) (byte 11)])
(char-array [(char 11) (char 13)])
(double-array [(double 127.5) (double 3.14157)])
(float-array [(float 19.2) (float 27.5)])
(int-array [1 2 3])
(long-array [(long 32769) (long 32770)])
(object-array [(java.util.Date.)])
(short-array [(short 1) (short 19)])))


(deftest other-marshaling
(let [db-entry-empty (marshal-db-entry (DatabaseEntry.))
db-entry-nil (marshal-db-entry nil)
Expand Down

0 comments on commit 94799d1

Please sign in to comment.