Changes needed for 2009AB version of UMLS
[umlisp.git] / utils.lisp
index 9fc23e4b8befa07d6a6a60c3819f1076d4009a51..20f91c4fe9d2ddea62b8c81030cf138d35eaa351 100644 (file)
@@ -7,15 +7,13 @@
 ;;;; Author:   Kevin M. Rosenberg
 ;;;; Created:  Apr 2000
 ;;;;
 ;;;; Author:   Kevin M. Rosenberg
 ;;;; Created:  Apr 2000
 ;;;;
-;;;; $Id$
-;;;;
 ;;;; This file, part of UMLisp, is
 ;;;; This file, part of UMLisp, is
-;;;;    Copyright (c) 2000-2006 by Kevin M. Rosenberg, M.D.
+;;;;    Copyright (c) 2000-2010 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.
 ;;;; *************************************************************************
 ;;;;
 ;;;; 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))
 (in-package #:umlisp)
 
 (declaim (inline make-cuisui make-cuilui parse-ui parse-cui))
 (defun parse-ui (s &optional (nullvalue 0))
   "Return integer value for a UMLS unique identifier."
   (declare (simple-string s)
 (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
   (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)))
   (if (stringp cui)
       (let ((ch (schar cui 0)))
 
 (defun parse-cui (cui)
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp cui)
       (let ((ch (schar cui 0)))
-       (if (char-equal ch #\C)
-           (parse-ui cui)
-           (nth-value 0 (parse-integer cui))))
+        (if (char-equal ch #\C)
+            (parse-ui cui)
+            (nth-value 0 (parse-integer cui))))
     cui))
     cui))
-    
+
 (defun parse-lui (lui)
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp lui)
       (let ((ch (schar lui 0)))
 (defun parse-lui (lui)
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp lui)
       (let ((ch (schar lui 0)))
-       (if (char-equal ch #\L)
-           (parse-ui lui)
-           (nth-value 0 (parse-integer lui))))
+        (if (char-equal ch #\L)
+            (parse-ui lui)
+            (nth-value 0 (parse-integer lui))))
     lui))
     lui))
-    
+
 (defun parse-sui (sui)
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp sui)
       (let ((ch (schar sui 0)))
 (defun parse-sui (sui)
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp sui)
       (let ((ch (schar sui 0)))
-       (if (char-equal ch #\S)
-           (parse-ui sui)
-           (nth-value 0 (parse-integer sui))))
+        (if (char-equal ch #\S)
+            (parse-ui sui)
+            (nth-value 0 (parse-integer sui))))
     sui))
     sui))
-    
+
 (defun parse-tui (tui)
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp tui)
       (let ((ch (schar tui 0)))
 (defun parse-tui (tui)
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp tui)
       (let ((ch (schar tui 0)))
-       (if (char-equal ch #\T)
-           (parse-ui tui)
-           (nth-value 0 (parse-integer tui))))
+        (if (char-equal ch #\T)
+            (parse-ui tui)
+            (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)))
     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))))
+        (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)))
     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)
+        (if (char-equal ch #\R)
+            (parse-ui rui)
           (nth-value 0 (parse-integer rui))))
     rui))
 
           (nth-value 0 (parse-integer rui))))
     rui))
 
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp eui)
       (let ((ch (schar eui 0)))
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp eui)
       (let ((ch (schar eui 0)))
-       (if (char-equal ch #\E)
-           (parse-ui eui)
-           (nth-value 0 (parse-integer eui))))
+        (if (char-equal ch #\E)
+            (parse-ui eui)
+            (nth-value 0 (parse-integer eui))))
     eui))
     eui))
-    
-(defconstant +cuisui-scale+ 10000000)
-(declaim (type (integer 0 10000000) +cuisui-scale+))
 
 
-#+64bit
+(defconstant +cuisui-scale+ 100000000)
+(declaim (type (integer 0 100000000) +cuisui-scale+))
+
+#+(or 64bit x86-64)
 (defun make-cuisui (cui sui)
 (defun make-cuisui (cui sui)
-  (declare (fixnum cui sui)
-          (optimize (speed 3) (safety 0) (space 0)))
-  (the fixnum 
+  (declare (type (integer 0 100000000) cui sui)
+           (optimize (speed 3) (safety 0) (space 0)))
+  (the fixnum
     (+ (the fixnum (* +cuisui-scale+ cui)) sui)))
 
     (+ (the fixnum (* +cuisui-scale+ cui)) sui)))
 
-#-64bit
+#-(or 64bit x86-64)
 (defun make-cuisui (cui sui)
 (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)
 (defun make-cuilui (cui lui)
-  (declare (fixnum cui lui)
-          (optimize (speed 3) (safety 0) (space 0)))
-  (the fixnum 
+  (declare (type (integer 0 100000000) cui lui)
+           (optimize (speed 3) (safety 0) (space 0)))
+  (the fixnum
     (+ (the fixnum (* +cuisui-scale+ cui)) lui)))
 
     (+ (the fixnum (* +cuisui-scale+ cui)) lui)))
 
-#-64bit
+#-(or 64bit x86-64)
 (defun make-cuilui (cui lui)
   (declare (fixnum cui lui)
 (defun make-cuilui (cui lui)
   (declare (fixnum cui lui)
-          (optimize (speed 3) (safety 0) (space 0)))
+           (optimize (speed 3) (safety 0) (space 0)))
   (+ (* +cuisui-scale+ cui) lui))
 
 (defun decompose-cuisui (cuisui)
   "Returns the CUI and SUI of a cuisui number"
   (+ (* +cuisui-scale+ cui) lui))
 
 (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
   (floor cuisui +cuisui-scale+))
 
 ;;; Lookup functions for uterms,ustr in ucons
   (dolist (uterm (s#term ucon))
     (dolist (ustr (s#str uterm))
       (when (string-equal sui (sui ustr))
   (dolist (uterm (s#term ucon))
     (dolist (ustr (s#str uterm))
       (when (string-equal sui (sui ustr))
-       (return-from find-ustr-in-ucon ustr)))))
+        (return-from find-ustr-in-ucon ustr)))))