Avoid C-isms #5

Merged
PuercoPop merged 4 commits from avoid-c-isms into master 2019-04-02 07:25:07 +00:00
Showing only changes of commit d130e45f58 - Show all commits

View file

@ -291,16 +291,6 @@
(ldb (byte 16 0) (decode-int32 s))) (ldb (byte 16 0) (decode-int32 s)))
#-(or sbcl cmucl openmcl allegro) (error "cant decode floats using this implementation")) #-(or sbcl cmucl openmcl allegro) (error "cant decode floats using this implementation"))
(defun decode-int32 (s)
"4 byte -> 32 bit int -> two's compliment (in network byte order)"
(let ((i (+ (ash (elt s 0) 24)
(ash (elt s 1) 16)
(ash (elt s 2) 8)
(elt s 3))))
(if (>= i #x7fffffff)
(- 0 (- #x100000000 i))
i)))
(defun decode-uint32 (s) (defun decode-uint32 (s)
"4 byte -> 32 bit unsigned int" "4 byte -> 32 bit unsigned int"
(let ((i (+ (ash (elt s 0) 24) (let ((i (+ (ash (elt s 0) 24)
@ -309,6 +299,18 @@
(elt s 3)))) (elt s 3))))
i)) i))
(defun decode-uint64 (s)
"8 byte -> 64 bit unsigned int"
(let ((i (+ (ash (elt s 0) 56)
(ash (elt s 1) 48)
(ash (elt s 2) 40)
(ash (elt s 3) 32)
(ash (elt s 4) 24)
(ash (elt s 5) 16)
(ash (elt s 6) 8)
(elt s 7))))
i))
(defmacro defint-encoder (num-of-octets &optional docstring) (defmacro defint-encoder (num-of-octets &optional docstring)
(let ((enc-name (intern (format nil "~:@(encode-int~)~D" (* 8 num-of-octets)))) (let ((enc-name (intern (format nil "~:@(encode-int~)~D" (* 8 num-of-octets))))
(buf (gensym)) (buf (gensym))
@ -327,28 +329,16 @@
(defint-encoder 4 "Convert an integer into a sequence of 4 bytes in network byte order.") (defint-encoder 4 "Convert an integer into a sequence of 4 bytes in network byte order.")
(defint-encoder 8 "Convert an integer into a sequence of 8 bytes in network byte order.") (defint-encoder 8 "Convert an integer into a sequence of 8 bytes in network byte order.")
(defun decode-uint64 (s) (defun decode-int32 (s)
"8 byte -> 64 bit unsigned int" "4 byte -> 32 bit int -> two's complement (in network byte order)"
(let ((i (+ (ash (elt s 0) 56) (let ((i (decode-uint32 s)))
(ash (elt s 1) 48) (if (>= i #x7fffffff)
(ash (elt s 2) 40) (- 0 (- #x100000000 i))
(ash (elt s 3) 32) i)))
(ash (elt s 4) 24)
(ash (elt s 5) 16)
(ash (elt s 6) 8)
(elt s 7))))
i))
(defun decode-int64 (s) (defun decode-int64 (s)
"8 byte -> 64 bit int -> two's compliment (in network byte order)" "8 byte -> 64 bit int -> two's complement (in network byte order)"
(let ((i (+ (ash (elt s 0) 56) (let ((i (decode-uint64 s)))
(ash (elt s 1) 48)
(ash (elt s 2) 40)
(ash (elt s 3) 32)
(ash (elt s 4) 24)
(ash (elt s 5) 16)
(ash (elt s 6) 8)
(elt s 7))))
(if (>= i #x7fffffffffffffff) (if (>= i #x7fffffffffffffff)
(- 0 (- #x10000000000000000 i)) (- 0 (- #x10000000000000000 i))
i))) i)))