Mercurial Hosting > luan
comparison src/luan/LuanException.java @ 1578:c922446f53aa
immutable threading
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 08 Feb 2021 14:16:19 -0700 |
parents | adba594db0b4 |
children | a9ff30fb5d89 |
comparison
equal
deleted
inserted
replaced
1577:60e5c324adf9 | 1578:c922446f53aa |
---|---|
7 import java.util.ArrayList; | 7 import java.util.ArrayList; |
8 import java.util.Map; | 8 import java.util.Map; |
9 import java.util.HashMap; | 9 import java.util.HashMap; |
10 | 10 |
11 | 11 |
12 public final class LuanException extends Exception implements LuanCloneable { | 12 public final class LuanException extends Exception implements LuanMutable { |
13 private LuanTable table; | 13 private LuanTable table; |
14 private Map extra = new HashMap(); | 14 private Map extra = new HashMap(); |
15 private boolean immutable = false; | |
15 | 16 |
16 public LuanException(String msg,Throwable cause) { | 17 public LuanException(String msg,Throwable cause) { |
17 super(msg,cause); | 18 super(msg,cause); |
18 } | 19 } |
19 | 20 |
23 | 24 |
24 public LuanException(Throwable cause) { | 25 public LuanException(Throwable cause) { |
25 super(cause); | 26 super(cause); |
26 } | 27 } |
27 | 28 |
28 @Override public LuanException shallowClone() { | 29 @Override public boolean isImmutable() { |
29 return new LuanException(getMessage(),getCause()); | 30 return immutable; |
30 } | 31 } |
31 | 32 |
32 @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) { | 33 @Override public void makeImmutable() { |
33 LuanException clone = (LuanException)dc; | 34 if(immutable) |
34 clone.table = (LuanTable)cloner.clone(table); | 35 return; |
35 clone.extra = (Map)cloner.clone(extra); | 36 immutable = true; |
36 } | 37 LuanMutable.makeImmutable(table); |
37 | 38 LuanMutable.makeImmutable(extra); |
38 @Override public void makeImmutable(LuanImmutabler immutabler) throws LuanException { | |
39 immutabler.makeImmutable(table); | |
40 immutabler.makeImmutable(extra); | |
41 } | 39 } |
42 | 40 |
43 public void put(String key,Object value) throws LuanException { | 41 public void put(String key,Object value) throws LuanException { |
44 if( table == null ) { | 42 if( table == null ) { |
45 extra.put(key,value); | 43 extra.put(key,value); |