;;;; Programer: Kevin Rosenberg
;;;; Date Started: 1 Nov 2001
;;;;
-;;;; $Id: edge-table-storage.lisp,v 1.2 2002/10/25 09:23:39 kevin Exp $
+;;;; $Id: edge-table-storage.lisp,v 1.3 2002/10/25 12:39:15 kevin Exp $
;;;;
;;;; This file is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
(in-package :reversi)
-(eval-when (:compile-toplevel :load-toplevel :execute)
+(defparameter *et-path* nil)
- (defparameter *et-path* nil)
-
- (if *load-truename*
+(eval-when (:load-toplevel :execute)
+ (let ((precompiled-path (make-pathname
+ :directory '(:absolute "usr" "share" "common-lisp"
+ "source" "reversi")
+ :name "edge-table"
+ :type "dat")))
+ (if (probe-file precompiled-path)
+ (setq *et-path* precompiled-path)
(setq *et-path* (make-pathname
:directory (pathname-directory *load-truename*)
:host (pathname-host *load-truename*)
:device (pathname-device *load-truename*)
:name "edge-table"
- :type "dat"))
- (setq *et-path* (make-pathname
- :directory '(:absolute "usr" "share" "common-lisp"
- "source" "reversi" "data")
- :name "edge-table"
- :type "dat")))
+ :type "dat"))))
(defun store-edge-table (et &optional (path *et-path*))
(with-open-file (stream path :direction :output
:if-exists :supersede)
(print (length et) stream)
(dotimes (i (length et))
+ (declare (fixnum i))
(print (aref et i) stream))))
(defun load-edge-table (&optional (path *et-path*))
(let* ((length (read stream))
(et (make-array length :element-type 'fixnum)))
(dotimes (i length)
+ (declare (fixnum i))
(setf (aref et i) (read stream)))
et))))
(unless (probe-file *et-path*)
+ (format *trace-output* ";; Recompiling edge-table, this make take several minutes")
(store-edge-table (make-edge-table)))
(unless *edge-table*