X-Git-Url: http://git.kpe.io/?p=cl-base64.git;a=blobdiff_plain;f=encode.lisp;h=0665ac941b49c50ac3d311d3ce5367868c54b800;hp=4bca7a3d352ab7cc2f077dc21dd2d61dad84fd07;hb=82add2747ad25aafe558e51660b41286d1e39b77;hpb=b8e5576d559d94e4f8cf69da074317bb0ab91195 diff --git a/encode.lisp b/encode.lisp index 4bca7a3..0665ac9 100644 --- a/encode.lisp +++ b/encode.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Dec 2002 ;;;; -;;;; $Id: encode.lisp,v 1.4 2003/01/14 11:43:10 kevin Exp $ +;;;; $Id: encode.lisp,v 1.6 2003/05/06 16:21:06 kevin Exp $ ;;;; ;;;; This file implements the Base64 transfer encoding algorithm as ;;;; defined in RFC 1521 by Borensten & Freed, September 1993. @@ -19,8 +19,6 @@ ;;;; Permission to use with BSD-style license included in the COPYING file ;;;; ************************************************************************* -(declaim (optimize (debug 3) (speed 3) (safety 1) (compilation-speed 0))) - ;;;; Extended by Kevin M. Rosenberg : ;;;; - .asd file ;;;; - numerous speed optimizations @@ -28,10 +26,13 @@ ;;;; - Renamed functions now that supporting integer conversions ;;;; - URI-compatible encoding using :uri key ;;;; -;;;; $Id: encode.lisp,v 1.4 2003/01/14 11:43:10 kevin Exp $ +;;;; $Id: encode.lisp,v 1.6 2003/05/06 16:21:06 kevin Exp $ (in-package #:cl-base64) +(eval-when (:compile-toplevel) + (declaim (optimize (space 0) (speed 3) (safety 1) (compilation-speed 0)))) + (defun round-next-multiple (x n) "Round x up to the next highest multiple of n." @@ -81,7 +82,7 @@ with a #\Newline." (ioutput 0))) (col (if (plusp columns) 0 - (1+ padded-length)))) + (the fixnum (1+ padded-length))))) (declare (fixnum string-length padded-length col ,@(when (eq output-type :string) '(ioutput))) @@ -129,8 +130,8 @@ with a #\Newline." (the fixnum (logand #x3f svalue)))) (output-char pad)))) - (do ((igroup 0 (1+ igroup)) - (isource 0 (+ isource 3))) + (do ((igroup 0 (the fixnum (1+ igroup))) + (isource 0 (the fixnum (+ isource 3)))) ((= igroup complete-group-count) (cond ((= remainder 2) @@ -149,9 +150,11 @@ with a #\Newline." (ash ,(case input-type (:string - '(char-code (the character (char input (1+ isource))))) + '(char-code (the character (char input + (the fixnum (1+ isource)))))) (:usb8-array - '(the fixnum (aref input (1+ isource))))) + '(the fixnum (aref input (the fixnum + (1+ isource)))))) 8)))) 3)) ((= remainder 1) @@ -188,14 +191,16 @@ with a #\Newline." (the fixnum ,(case input-type (:string - '(char-code (the character (char input (1+ isource))))) + '(char-code (the character (char input + (the fixnum (1+ isource)))))) (:usb8-array '(aref input (1+ isource))))) 8)) (the fixnum ,(case input-type (:string - '(char-code (the character (char input (+ 2 isource))))) + '(char-code (the character (char input + (the fixnum (+ 2 isource)))))) (:usb8-array '(aref input (+ 2 isource)))) ))) @@ -289,9 +294,10 @@ with a #\Newline." (last-nonpad-char (1- nonpad-chars)) (str (make-string strlen))) (declare (fixnum padded-length last-nonpad-char)) - (do* ((strpos 0 (1+ strpos)) + (do* ((strpos 0 (the fixnum (1+ strpos))) (int (ash input (/ padding-bits 3)) (ash int -6)) - (6bit-value (logand int #x3f) (logand int #x3f))) + (6bit-value (the fixnum (logand int #x3f)) + (the fixnum (logand int #x3f)))) ((= strpos nonpad-chars) (let ((col 0)) (declare (fixnum col))