annotate src/luan/LuanMutable.java @ 1578:c922446f53aa

immutable threading
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 08 Feb 2021 14:16:19 -0700
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.util.Map;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 import java.util.Collection;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 public interface LuanMutable {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 public boolean isImmutable();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 public void makeImmutable();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 public static void makeImmutable(LuanMutable obj) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 if( obj==null )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 return;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 obj.makeImmutable();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 public static void makeImmutable(Object[] a) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 if( a==null )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 return;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 for( Object obj : a ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 makeImmutable(obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 public static void makeImmutable(Map map) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 if( map==null )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 return;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 for( Object stupid : map.entrySet() ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 Map.Entry entry = (Map.Entry)stupid;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 makeImmutable(entry.getKey());
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 makeImmutable(entry.getValue());
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 public static void makeImmutable(Collection col) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 if( col==null )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 return;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 for( Object obj : col ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 makeImmutable(obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 public static void makeImmutable(Object obj) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 if( obj instanceof LuanMutable )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 makeImmutable((LuanMutable)obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 else if( obj instanceof Object[] )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 makeImmutable((Object[])obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 else if( obj instanceof Map )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 makeImmutable((Map)obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 else if( obj instanceof Collection )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 makeImmutable((Collection)obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 }