[rjain-utils-cvs] CVS formulate/src
rjain
rjain at common-lisp.net
Thu Nov 19 00:44:14 UTC 2009
Update of /project/rjain-utils/cvsroot/formulate/src
In directory cl-net:/tmp/cvs-serv28087/src
Modified Files:
formulate.lisp metaobjects.lisp package.lisp variables.lisp
Log Message:
add dynamic-formulators: formua-formulators which allow changing of the formula at run time
unify the procedure for accessing the formuator of a variable or slot
--- /project/rjain-utils/cvsroot/formulate/src/formulate.lisp 2009/11/11 08:52:10 1.4
+++ /project/rjain-utils/cvsroot/formulate/src/formulate.lisp 2009/11/19 00:44:14 1.5
@@ -7,6 +7,8 @@
;;; *** GENERAL DEFINITIONS ***
;;;
+(defvar *get-formulator* nil)
+
(defvar *formulating* '()
"The FORMULATOR, if any, that is being evaluated.")
@@ -116,3 +118,15 @@
(defmethod formulator-value-changed
((sink lazy-formula-formulator-sink) source new-value old-value)
(formulator-invalidate sink))
+
+;;;
+;;; DYNAMIC-FORMULATOR
+;;;
+
+(defclass dynamic-formulator (lazy-formula-formulator-sink)
+ ())
+
+(defmethod (setf formulator-value) (new-value (formulator dynamic-formulator))
+ (setf (formulator-formula formulator) new-value
+ (formulator-formula-function formulator) (compile nil `(lambda () ,new-value)))
+ (formulator-invalidate formulator))
--- /project/rjain-utils/cvsroot/formulate/src/metaobjects.lisp 2009/11/04 21:41:35 1.2
+++ /project/rjain-utils/cvsroot/formulate/src/metaobjects.lisp 2009/11/19 00:44:14 1.3
@@ -57,17 +57,15 @@
(defvar *me*)
-(defvar *get-slot-formulator* nil)
-
(defmethod slot-value-using-class :around
(class object (slotd formulated-effective-slot-definition))
- (if *get-slot-formulator*
+ (if *get-formulator*
(call-next-method)
(let ((*me* object))
(formulator-value (call-next-method) 'unbound-slot (slot-definition-name slotd)))))
(defmethod slot-formulator-using-class (class object (slotd formulated-effective-slot-definition))
- (let ((*get-slot-formulator* t))
+ (let ((*get-formulator* t))
(slot-value-using-class class object slotd)))
(defmethod (setf slot-value-using-class) :around
@@ -80,3 +78,7 @@
(declaim (inline my))
(defun my (slot)
(slot-value *me* slot))
+
+(defun slot-formulator (object slot-name)
+ (let ((*get-formulator* t))
+ (slot-value object slot-name)))
\ No newline at end of file
--- /project/rjain-utils/cvsroot/formulate/src/package.lisp 2009/11/11 08:53:07 1.3
+++ /project/rjain-utils/cvsroot/formulate/src/package.lisp 2009/11/19 00:44:14 1.4
@@ -29,5 +29,6 @@
#:formulated-slot-definition
#:formulated-direct-slot-definition
#:formulated-effective-slot-definition
+ #:slot-formulator
#:slot-formulator-using-class))
(:shadowing-import-from :formulate . #1#))
--- /project/rjain-utils/cvsroot/formulate/src/variables.lisp 2009/11/11 08:54:08 1.3
+++ /project/rjain-utils/cvsroot/formulate/src/variables.lisp 2009/11/19 00:44:14 1.4
@@ -12,7 +12,7 @@
(setf (symbol-value ',name)
(make-instance ',(or formulator-class
(if formula-p
- 'lazy-formula-formulator-sink
+ 'dynamic-formulator
'simple-formulator-source))
'formula ',formula
'formula-function (lambda () (declare , at declare) ,formula)
@@ -20,7 +20,9 @@
',name))
(defun formulate-variable (name)
- (formulator-value (symbol-value name) 'unbound-variable name))
+ (if *get-formulator*
+ (symbol-value name)
+ (formulator-value (symbol-value name) 'unbound-variable name)))
(defun (setf formulate-variable) (new-value name)
(setf (formulator-value (symbol-value name)) new-value))
More information about the Rjain-utils-cvs
mailing list