1 ;;;; $Id: utils.lisp,v 1.1 2002/10/05 20:17:14 kevin Exp $
5 (declaim (inline xml-cdata make-cuisui make-cuilui parse-ui parse-cui))
6 (declaim (optimize (speed 3) (safety 1)))
8 (defmacro def-metaclass-reader (field)
9 "Create function for reading slot of metaclass"
11 (car (slot-value (class-of cl) ',field))))
13 (defmacro def-metaclass-reader-car (field)
14 "Create function for reading slot of metaclass"
16 (car (slot-value (class-of cl) ',field))))
18 ;;; Field transformations
20 (defun parse-ui (s &optional (nullvalue 0))
21 "Return integer value for a UMLS unique identifier."
24 (parse-integer s :start 1)))
26 (defun parse-cui (cui)
28 (let ((ch (aref cui 0)))
34 (defun parse-lui (lui)
36 (let ((ch (aref lui 0)))
42 (defun parse-sui (sui)
44 (let ((ch (aref sui 0)))
50 (defun parse-tui (tui)
52 (let ((ch (aref tui 0)))
58 (defun parse-eui (eui)
60 (let ((ch (aref eui 0)))
66 (defun xml-cdata (str)
67 (concatenate 'string "<![CDATA[" str "]]>"))
69 (defconstant +cuisui-scale+ 10000000)
71 (defun make-cuisui (cui sui)
72 (declare (fixnum cui sui))
73 (the integer (+ (* +cuisui-scale+ cui) sui)))
75 (defun make-cuilui (cui lui)
76 (declare (fixnum cui lui))
77 (the integer (+ (* +cuisui-scale+ cui) lui)))
79 (defun decompose-cuisui (cuisui)
80 (declare (integer cuisui))
81 (let* ((cui (the fixnum (truncate (/ cuisui +cuisui-scale+))))
82 (sui (the fixnum (- cuisui (* cui +cuisui-scale+)))))