aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/singleton.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/singleton.clj')
-rw-r--r--src/clojure/contrib/singleton.clj54
1 files changed, 0 insertions, 54 deletions
diff --git a/src/clojure/contrib/singleton.clj b/src/clojure/contrib/singleton.clj
deleted file mode 100644
index b10223ff..00000000
--- a/src/clojure/contrib/singleton.clj
+++ /dev/null
@@ -1,54 +0,0 @@
-;;; singleton.clj: singleton functions
-
-;; by Stuart Sierra, http://stuartsierra.com/
-;; April 14, 2009
-
-;; Copyright (c) Stuart Sierra, 2009. 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.
-
-
-;; Change Log:
-;;
-;; April 14, 2009: added per-thread-singleton, renamed singleton to
-;; global-singleton
-;;
-;; April 9, 2009: initial version
-
-
-(ns
- #^{:author "Stuart Sierra",
- :doc "Singleton functions"}
- clojure.contrib.singleton)
-
-(defn global-singleton
- "Returns a global singleton function. f is a function of no
- arguments that creates and returns some object. The singleton
- function will call f just once, the first time it is needed, and
- cache the value for all subsequent calls.
-
- Warning: global singletons are often unsafe in multi-threaded code.
- Consider per-thread-singleton instead."
- [f]
- (let [instance (atom nil)
- make-instance (fn [_] (f))]
- (fn [] (or @instance (swap! instance make-instance)))))
-
-(defn per-thread-singleton
- "Returns a per-thread singleton function. f is a function of no
- arguments that creates and returns some object. The singleton
- function will call f only once for each thread, and cache its value
- for subsequent calls from the same thread. This allows you to
- safely and lazily initialize shared objects on a per-thread basis.
-
- Warning: due to a bug in JDK 5, it may not be safe to use a
- per-thread-singleton in the initialization function for another
- per-thread-singleton. See
- http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5025230"
- [f]
- (let [thread-local (proxy [ThreadLocal] [] (initialValue [] (f)))]
- (fn [] (.get thread-local))))