summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/funcdata/Freezable.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/funcdata/Freezable.java')
-rw-r--r--src/main/java/bjc/funcdata/Freezable.java73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/main/java/bjc/funcdata/Freezable.java b/src/main/java/bjc/funcdata/Freezable.java
new file mode 100644
index 0000000..e83accb
--- /dev/null
+++ b/src/main/java/bjc/funcdata/Freezable.java
@@ -0,0 +1,73 @@
+package bjc.funcdata;
+
+/**
+ * Indicates that an object can switch between immutable and mutable modes.
+ *
+ * Note that this only implements 'shallow' immutability. Namely, any sub-objects
+ * are not made immutable, and if the type is a collection, the elements are still
+ * as mutable as they were before.
+ *
+ * Implementations of this interface may choose to throw {@link ObjectFrozen} if
+ * you attempt to modify a frozen object, but they may also choose not to.
+ *
+ * @author Ben Culkin
+ */
+public interface Freezable {
+ /**
+ * Freezes the internal state of this object, making it immutable.
+ *
+ * @return True if the object is frozen, false if it couldn't be frozen.
+ */
+ public boolean freeze();
+ /**
+ * Thaws the internal state of this object, making it mutable.
+ *
+ * @return True if the object is thawed, false if it couldn't be thawed.
+ */
+ public boolean thaw();
+
+ /**
+ * 'Deep-freeze' this object, making it immutable and disabling the ability to
+ * thaw it.
+ *
+ * @return True if the object was deep-frozen, false if that couldn't happen.
+ */
+ default boolean deepFreeze() {
+ return false;
+ }
+
+ /**
+ * Check if this object can be frozen.
+ *
+ * @return Whether or not the object can be frozen.
+ */
+ default boolean canFreeze() {
+ return false;
+ }
+
+ /**
+ * Checks if this object can be thawed.
+ *
+ * @return Whether or not the object can be thawed.
+ */
+ default boolean canThaw() {
+ return false;
+ }
+
+ /**
+ * Determines if this object is frozen.
+ *
+ * @return True if the object is frozen, false if the object is thawed.
+ */
+ public boolean isFrozen();
+
+
+ /**
+ * Determines if this object is thawed.
+ *
+ * @return True if the object is thawed, false if the object is thawed.
+ */
+ default boolean isThawed() {
+ return !isFrozen();
+ }
+}