X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=utils.lisp;h=ba75eea82c7fb4074c3500a30e9f7523e1088e72;hb=2602e82650f294955a06228db3d4b6a872f1485c;hp=974da721d318d7b6ba0ebb04ceb201ea3664a9ae;hpb=aeade16272b79115d3f307906c7a3e9597137e97;p=umlisp.git diff --git a/utils.lisp b/utils.lisp index 974da72..ba75eea 100644 --- a/utils.lisp +++ b/utils.lisp @@ -10,12 +10,12 @@ ;;;; $Id$ ;;;; ;;;; This file, part of UMLisp, is -;;;; Copyright (c) 2000-2004 by Kevin M. Rosenberg, M.D. +;;;; Copyright (c) 2000-2006 by Kevin M. Rosenberg, M.D. ;;;; ;;;; UMLisp users are granted the rights to distribute and use this software ;;;; as governed by the terms of the GNU General Public License. ;;;; ************************************************************************* - + (in-package #:umlisp) (declaim (inline make-cuisui make-cuilui parse-ui parse-cui)) @@ -48,7 +48,7 @@ (parse-ui cui) (nth-value 0 (parse-integer cui)))) cui)) - + (defun parse-lui (lui) (declare (optimize (speed 3) (safety 0))) (if (stringp lui) @@ -57,7 +57,7 @@ (parse-ui lui) (nth-value 0 (parse-integer lui)))) lui)) - + (defun parse-sui (sui) (declare (optimize (speed 3) (safety 0))) (if (stringp sui) @@ -66,7 +66,7 @@ (parse-ui sui) (nth-value 0 (parse-integer sui)))) sui)) - + (defun parse-tui (tui) (declare (optimize (speed 3) (safety 0))) (if (stringp tui) @@ -76,6 +76,24 @@ (nth-value 0 (parse-integer tui)))) tui)) +(defun parse-aui (aui) + (declare (optimize (speed 3) (safety 0))) + (if (stringp aui) + (let ((ch (schar aui 0))) + (if (char-equal ch #\A) + (parse-ui aui) + (nth-value 0 (parse-integer aui)))) + aui)) + +(defun parse-rui (rui) + (declare (optimize (speed 3) (safety 0))) + (if (stringp rui) + (let ((ch (schar rui 0))) + (if (char-equal ch #\R) + (parse-ui rui) + (nth-value 0 (parse-integer rui)))) + rui)) + (defun parse-eui (eui) (declare (optimize (speed 3) (safety 0))) (if (stringp eui) @@ -84,15 +102,31 @@ (parse-ui eui) (nth-value 0 (parse-integer eui)))) eui)) - + (defconstant +cuisui-scale+ 10000000) -(declaim (type fixnum +cuisui-scale+)) +(declaim (type (integer 0 10000000) +cuisui-scale+)) + +#+(or 64bit x86-64) +(defun make-cuisui (cui sui) + (declare (type (integer 0 10000000) cui sui) + (optimize (speed 3) (safety 0) (space 0))) + (the fixnum + (+ (the fixnum (* +cuisui-scale+ cui)) sui))) +#-(or 64bit x86-64) (defun make-cuisui (cui sui) (declare (fixnum cui sui) (optimize (speed 3) (safety 0) (space 0))) (+ (* +cuisui-scale+ cui) sui)) +#+(or 64bit x86-64) +(defun make-cuilui (cui lui) + (declare (type (integer 0 10000000) cui lui) + (optimize (speed 3) (safety 0) (space 0))) + (the fixnum + (+ (the fixnum (* +cuisui-scale+ cui)) lui))) + +#-(or 64bit x86-64) (defun make-cuilui (cui lui) (declare (fixnum cui lui) (optimize (speed 3) (safety 0) (space 0))) @@ -100,6 +134,8 @@ (defun decompose-cuisui (cuisui) "Returns the CUI and SUI of a cuisui number" + #-(or 64bit x86-64) (declare (integer cuisui)) + #+(or 64bit x86-64) (declare (fixnum cuisui)) (floor cuisui +cuisui-scale+)) ;;; Lookup functions for uterms,ustr in ucons