aboutsummaryrefslogtreecommitdiff
path: root/modules/agent-utils
diff options
context:
space:
mode:
Diffstat (limited to 'modules/agent-utils')
-rw-r--r--modules/agent-utils/pom.xml16
-rw-r--r--modules/agent-utils/src/main/clojure/clojure/contrib/agent_utils.clj35
2 files changed, 51 insertions, 0 deletions
diff --git a/modules/agent-utils/pom.xml b/modules/agent-utils/pom.xml
new file mode 100644
index 00000000..2ad2d471
--- /dev/null
+++ b/modules/agent-utils/pom.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http//www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.clojure.contrib</groupId>
+ <artifactId>parent</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+ <artifactId>agent-utils</artifactId>
+ <dependencies>
+ </dependencies>
+</project> \ No newline at end of file
diff --git a/modules/agent-utils/src/main/clojure/clojure/contrib/agent_utils.clj b/modules/agent-utils/src/main/clojure/clojure/contrib/agent_utils.clj
new file mode 100644
index 00000000..1b7b2107
--- /dev/null
+++ b/modules/agent-utils/src/main/clojure/clojure/contrib/agent_utils.clj
@@ -0,0 +1,35 @@
+; Copyright (c) Christophe Grand, November 2008. All rights reserved.
+
+; The use and distribution terms for this software are covered by the
+; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+; which can be found in the file epl-v10.html at the root of this
+; distribution.
+; By using this software in any fashion, you are agreeing to be bound by
+; the terms of this license.
+; You must not remove this notice, or any other, from this software.
+
+;; misc agent utilities
+
+;; note to other contrib members: feel free to add to this lib
+
+(ns
+ ^{:author "Christophe Grande",
+ :doc "Miscellaneous agent utilities
+ (note to other contrib members: feel free to add to this lib)",
+}
+ clojure.contrib.agent-utils)
+
+(defmacro capture-and-send
+ "Capture the current value of the specified vars and rebind
+ them on the agent thread before executing the action.
+
+ Example:
+ (capture-and-send [*out*] a f b c)"
+
+ [vars agent action & args]
+ (let [locals (map #(gensym (name %)) vars)]
+ `(let [~@(interleave locals vars)
+ action# (fn [& args#]
+ (binding [~@(interleave vars locals)]
+ (apply ~action args#)))]
+ (send ~agent action# ~@args))))