X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=utils.lisp;h=358a1413bbcca0741711fdd61be38cca11011241;hb=e6ef11f4c42de5a6754f73d9a714a0213b3a0133;hp=7fa3395f2ca870887c308b0c920f5854d4c88e4b;hpb=b9fe7fe8b8e24133538f78dbaf6af73b5f0bdec2;p=umlisp.git diff --git a/utils.lisp b/utils.lisp index 7fa3395..358a141 100644 --- a/utils.lisp +++ b/utils.lisp @@ -15,7 +15,7 @@ ;;;; 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)) @@ -35,10 +35,10 @@ (defun parse-ui (s &optional (nullvalue 0)) "Return integer value for a UMLS unique identifier." (declare (simple-string s) - (optimize (speed 3) (safety 0))) + (optimize (speed 3) (safety 0))) (if (< (length s) 2) nullvalue - (nth-value 0 (parse-integer s :start 1)))) + (nth-value 0 (parse-integer s :start 1)))) (defun parse-cui (cui) (declare (optimize (speed 3) (safety 0))) @@ -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) @@ -85,6 +85,15 @@ (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) @@ -93,31 +102,32 @@ (parse-ui eui) (nth-value 0 (parse-integer eui)))) eui)) - + (defconstant +cuisui-scale+ 10000000) (declaim (type (integer 0 10000000) +cuisui-scale+)) -#+64bit +#+(or 64bit x86-64) (defun make-cuisui (cui sui) - (declare (fixnum cui sui) - (optimize (speed 3) (safety 0) (space 0))) - (the fixnum + (declare (type (integer 0 10000000) cui sui) + (optimize (speed 3) (safety 0) (space 0))) + (the fixnum (+ (the fixnum (* +cuisui-scale+ cui)) sui))) -#-64bit +#-(or 64bit x86-64) (defun make-cuisui (cui sui) - (declare (fixnum cui sui) - (optimize (speed 3) (safety 0) (space 0))) - (+ (* +cuisui-scale+ cui) sui)) + (when (and cui sui) + (locally (declare (fixnum cui sui) + (optimize (speed 3) (safety 0) (space 0))) + (+ (* +cuisui-scale+ cui) sui)))) -#+64bit +#+(or 64bit x86-64) (defun make-cuilui (cui lui) - (declare (fixnum cui lui) - (optimize (speed 3) (safety 0) (space 0))) - (the fixnum + (declare (type (integer 0 10000000) cui lui) + (optimize (speed 3) (safety 0) (space 0))) + (the fixnum (+ (the fixnum (* +cuisui-scale+ cui)) lui))) -#-64bit +#-(or 64bit x86-64) (defun make-cuilui (cui lui) (declare (fixnum cui lui) (optimize (speed 3) (safety 0) (space 0))) @@ -125,8 +135,8 @@ (defun decompose-cuisui (cuisui) "Returns the CUI and SUI of a cuisui number" - #-64bit (declare (integer cuisui)) - #+64bit (declare (fixnum cuisui)) + #-(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