diff options
author | Rich Hickey <richhickey@gmail.com> | 2006-04-02 16:34:00 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2006-04-02 16:34:00 +0000 |
commit | ab3658c3f102d470c146260c87d7ea34b365126f (patch) | |
tree | 25af35169d4be51c310372e6788ef4e05ea865c7 /src/cli/runtime/ThreadLocalData.cs | |
parent | ad76fd174341a19ec4b311c17d3c760637d81724 (diff) |
Initial commit of CLI runtime
Diffstat (limited to 'src/cli/runtime/ThreadLocalData.cs')
-rw-r--r-- | src/cli/runtime/ThreadLocalData.cs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/cli/runtime/ThreadLocalData.cs b/src/cli/runtime/ThreadLocalData.cs new file mode 100644 index 00000000..0f41ecf8 --- /dev/null +++ b/src/cli/runtime/ThreadLocalData.cs @@ -0,0 +1,86 @@ +/** + * Copyright (c) Rich Hickey. All rights reserved. + * The use and distribution terms for this software are covered by the + * Common Public License 1.0 (http://opensource.org/licenses/cpl.php) + * which can be found in the file CPL.TXT 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. + **/ + +/* rich Mar 25, 2006 11:45:22 AM */ + +using System;
+using System.Collections.Specialized;
+
+namespace org.clojure.runtime
+{ +public class ThreadLocalData{ + +public const int MULTIPLE_VALUES_LIMIT = 20; +public int mvCount = 0; +public Object[] mvArray = new Object[MULTIPLE_VALUES_LIMIT]; + +HybridDictionary dynamicBindings = new HybridDictionary(); + +public Cons getDynamicBinding(Symbol sym) + { + return (Cons) dynamicBindings[sym]; + } + +public Cons pushDynamicBinding(Symbol sym, Object val) + { + Cons ret = new Cons(val, getDynamicBinding(sym)); + dynamicBindings[sym] = ret; + return ret; + } + + +public Cons popDynamicBinding(Symbol sym) + { + Cons ret = (Cons) getDynamicBinding(sym).rest; + dynamicBindings[sym] = ret; + return ret; + } + +public ThreadLocalData(HybridDictionary dynamicBindings) + { + this.mvCount = 0; + this.mvArray = new Object[MULTIPLE_VALUES_LIMIT]; + this.dynamicBindings = dynamicBindings; + } + +public ThreadLocalData(): + this(new HybridDictionary()) + { + } + +public static ThreadLocalData get() + { + if(tld == null) + tld = new ThreadLocalData(); + return tld; + } + +/* +note this is not the same semantics as InheritableThreadLocal - aargh +might need to make Java side non-inheritable +*/ +[ThreadStatic] + static ThreadLocalData tld; + /* was this in Java +static InheritableThreadLocal tld = new InheritableThreadLocal(){ + protected Object childValue(Object object) + { + return new ThreadLocalData((HybridDictionary) ((ThreadLocalData) object).dynamicBindings.clone()); + } + + protected Object initialValue() + { + return new ThreadLocalData(); + } +}; +*/ + +} +} |