Add parse-float
authorKevin M. Rosenberg <kevin@rosenberg.net>
Sat, 2 Jul 2011 17:02:23 +0000 (11:02 -0600)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Sat, 2 Jul 2011 17:02:23 +0000 (11:02 -0600)
package.lisp
processes.lisp
strings.lisp

index 6432b88f5f8000c26da7107664aff489af76e935..c9ecf42e027b7ac4aeabe6cd0b9d167c0d87a833 100644 (file)
    #:print-separated-strings
    #:lex-string
    #:split-alphanumeric-string
+   #:safely-read-from-string
+   #:parse-float
 
    ;; strmatch.lisp
    #:score-multiword-match
index 7017ce74e73d95f9cc8fe4fdd57e64d4919f5965..22cde94ecc11f329591500fff403e1d7e024dc5a 100644 (file)
@@ -16,8 +16,8 @@
   #+cmu (mp:make-process func :name name)
   #+lispworks (mp:process-run-function name nil func)
   #+sb-thread (sb-thread:make-thread func :name name)
-  #+openmcl (ccl:process-run-function name func)
-  #-(or allegro cmu lispworks sb-thread openmcl) (funcall func)
+  #+ccl (ccl:process-run-function name func)
+  #-(or allegro cmu lispworks sb-thread ccl) (funcall func)
   )
 
 (defun destroy-process (process)
   #+allegro (mp:process-kill process)
   #+sb-thread (sb-thread:destroy-thread process)
   #+lispworks (mp:process-kill process)
-  #+openmcl (ccl:process-kill process)
+  #+ccl (ccl:process-kill process)
   )
 
 (defun make-lock (name)
+  "Make a named process lock."
+  #+abcl (ext:make-thread-lock)
   #+allegro (mp:make-process-lock :name name)
+  #+ccl (ccl:make-lock name)
   #+cmu (mp:make-lock name)
   #+lispworks (mp:make-lock :name name)
   #+sb-thread (sb-thread:make-mutex :name name)
-  #+openmcl (ccl:make-lock name)
-  )
+  #-(or lispworks abcl openmcl allegro sb-thread)
+  (declare (ignore name))
+  #-(or abcl allegro ccl cmu lispworks sb-thread)
+  nil)
+
 
 (defmacro with-lock-held ((lock) &body body)
+  #+abcl
+  `(ext:with-thread-lock (,lock) ,@body)
   #+allegro
   `(mp:with-process-lock (,lock) ,@body)
+  #+ccl
+  `(ccl:with-lock-grabbed (,lock) ,@body)
   #+cmu
   `(mp:with-lock-held (,lock) ,@body)
   #+lispworks
   `(mp:with-lock (,lock) ,@body)
   #+sb-thread
   `(sb-thread:with-recursive-lock (,lock) ,@body)
-  #+openmcl
-  `(ccl:with-lock-grabbed (,lock) ,@body)
-  #-(or allegro cmu lispworks sb-thread openmcl)
+  #-(or abcl allegro ccl cmu lispworks sb-thread)
   `(progn ,@body)
   )
 
   `(mp:with-timeout (,seconds) ,@body)
   #+sb-thread
   `(sb-ext:with-timeout ,seconds ,@body)
-  #+openmcl
+  #+ccl
   `(ccl:process-wait-with-timeout "waiting"
                                  (* ,seconds ccl:*ticks-per-second*)
                                  #'(lambda ()
                                      ,@body) nil)
-  #-(or allegro cmu sb-thread openmcl)
+  #-(or allegro cmu sb-thread ccl)
   `(progn ,@body)
   )
 
 (defun process-sleep (n)
+  "Put thread to sleep for n seconds."
   #+allegro (mp:process-sleep n)
   #-allegro (sleep n))
 
+
+
index 4dcda494249b45e44b6166bf304f0c154f0ce8a2..3390581840e0d9aafa67b80068ebf05499f93d5d 100644 (file)
@@ -718,3 +718,14 @@ for characters in a string"
       (do ((x (read stream nil eof) (read stream nil eof))
            (l nil (cons x l)))
           ((eq x eof) (nreverse l))))))
+
+(defun safely-read-from-string (str &rest read-from-string-args)
+  "Read an expression from the string STR, with *READ-EVAL* set
+to NIL. Any unsafe expressions will be replaced by NIL in the
+resulting S-Expression."
+  (let ((*read-eval* nil))
+    (ignore-errors (apply 'read-from-string str read-from-string-args))))
+
+(defun parse-float (f)
+  (let ((*read-default-float-format* 'double-float))
+    (coerce (safely-read-from-string f) 'double-float)))