Skip to content

Commit

Permalink
defines otp-value as a protocol and not a multimethod
Browse files Browse the repository at this point in the history
  • Loading branch information
videlalvaro committed Aug 16, 2010
1 parent 4b141a7 commit a8dd46d
Showing 1 changed file with 57 additions and 28 deletions.
85 changes: 57 additions & 28 deletions src/closerl/core.clj
Expand Up @@ -30,34 +30,63 @@
(try (Integer/parseInt s) (try (Integer/parseInt s)
(catch NumberFormatException nfe 0))) (catch NumberFormatException nfe 0)))


(defmulti otp-value class) (defprotocol FromErlang

(otp-value [val]))
(defmethod otp-value OtpErlangBoolean [o] (.booleanValue o))
(defmethod otp-value OtpErlangAtom [o] (.atomValue o)) (extend-protocol FromErlang

OtpErlangBoolean
(defmethod otp-value OtpErlangBinary [o] (String. (.binaryValue o))) (otp-value [o] (.booleanValue o))


(defmethod otp-value OtpErlangChar [o] (parse-integer (str o))) OtpErlangAtom
(defmethod otp-value OtpErlangByte [o] (parse-integer (str o))) (otp-value [o] (.atomValue o))
(defmethod otp-value OtpErlangShort [o] (parse-integer (str o)))
(defmethod otp-value OtpErlangUShort [o] (parse-integer (str o))) OtpErlangBinary
(defmethod otp-value OtpErlangInt [o] (parse-integer (str o))) (otp-value [o] (String. (.binaryValue o)))
(defmethod otp-value OtpErlangUInt [o] (parse-integer (str o)))
(defmethod otp-value OtpErlangLong [o] OtpErlangChar
(if (.isLong o) (otp-value [o] (parse-integer (str o)))
(.longValue o)
(.bigIntegerValue o))) OtpErlangByte
(defmethod otp-value OtpErlangFloat [o] (float (.floatValue o))) (otp-value [o] (parse-integer (str o)))
(defmethod otp-value OtpErlangDouble [o] (float (.floatValue o)))
(defmethod otp-value OtpErlangString [o] (str (.stringValue o))) OtpErlangShort
(defmethod otp-value OtpErlangList [o] (with-meta (map otp-value (.elements o)) {:otp-type "List"})) (otp-value [o] (parse-integer (str o)))
(defmethod otp-value OtpErlangTuple [o] (with-meta (map otp-value (.elements o)) {:otp-type "Tuple"}))
(defmethod otp-value nil [o] "") OtpErlangUShort
(defmethod otp-value OtpErlangObject [o] o) (otp-value [o] (parse-integer (str o)))


(defmulti as-seq class) OtpErlangInt
(defmethod as-seq OtpErlangList [o] (seq (.elements o))) (otp-value [o] (parse-integer (str o)))
(defmethod as-seq OtpErlangTuple [o] (seq (.elements o)))
OtpErlangUInt
(otp-value [o] (parse-integer (str o)))

OtpErlangLong
(otp-value [o]
(if (.isLong o)
(.longValue o)
(.bigIntegerValue o)))

OtpErlangFloat
(otp-value [o] (float (.floatValue o)))

OtpErlangDouble
(otp-value [o] (float (.floatValue o)))

OtpErlangString
(otp-value [o] (str (.stringValue o)))

OtpErlangList
(otp-value [o] (with-meta (map otp-value (.elements o)) {:otp-type "List"}))

OtpErlangTuple
(otp-value [o] (with-meta (map otp-value (.elements o)) {:otp-type "Tuple"}))

OtpErlangObject
(otp-value [o] o)

nil
(otp-value [o] ""))


(defn otp-node (defn otp-node
"Creates an OtpNode" "Creates an OtpNode"
Expand Down

0 comments on commit a8dd46d

Please sign in to comment.