diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/luan/LuanMutable.java	Mon Feb 08 14:16:19 2021 -0700
@@ -0,0 +1,53 @@
+package luan;
+
+import java.util.Map;
+import java.util.Collection;
+
+
+public interface LuanMutable {
+	public boolean isImmutable();
+	public void makeImmutable();
+
+	public static void makeImmutable(LuanMutable obj) {
+		if( obj==null )
+			return;
+		obj.makeImmutable();
+	}
+
+	public static void makeImmutable(Object[] a) {
+		if( a==null )
+			return;
+		for( Object obj : a ) {
+			makeImmutable(obj);
+		}
+	}
+
+	public static void makeImmutable(Map map) {
+		if( map==null )
+			return;
+		for( Object stupid : map.entrySet() ) {
+			Map.Entry entry = (Map.Entry)stupid;
+			makeImmutable(entry.getKey());
+			makeImmutable(entry.getValue());
+		}
+	}
+
+	public static void makeImmutable(Collection col) {
+		if( col==null )
+			return;
+		for( Object obj : col ) {
+			makeImmutable(obj);
+		}
+	}
+
+	public static void makeImmutable(Object obj) {
+		if( obj instanceof LuanMutable )
+			makeImmutable((LuanMutable)obj);
+		else if( obj instanceof Object[] )
+			makeImmutable((Object[])obj);
+		else if( obj instanceof Map )
+			makeImmutable((Map)obj);
+		else if( obj instanceof Collection )
+			makeImmutable((Collection)obj);
+	}
+}