*** empty log message ***
[IRC.git] / Robust / Transactions / jcarderdstm2version / src / com / enea / jcarder / common / Lock.java
diff --git a/Robust/Transactions/jcarderdstm2version/src/com/enea/jcarder/common/Lock.java b/Robust/Transactions/jcarderdstm2version/src/com/enea/jcarder/common/Lock.java
new file mode 100644 (file)
index 0000000..114997b
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * JCarder -- cards Java programs to keep threads disentangled
+ *
+ * Copyright (C) 2006-2007 Enea AB
+ * Copyright (C) 2007 Ulrik Svensson
+ * Copyright (C) 2007 Joel Rosdahl
+ *
+ * This program is made available under the GNU GPL version 2, with a special
+ * exception for linking with JUnit. See the accompanying file LICENSE.txt for
+ * details.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+package com.enea.jcarder.common;
+
+//import net.jcip.annotations.ThreadSafe;
+
+/**
+ * A Lock instance represents a Java monitor object.
+ */
+//@ThreadSafe
+public final class Lock {
+    private final String mClassName;
+    private final int mObjectId;
+
+    public Lock(Object lock) {
+        mClassName = lock.getClass().getName();
+        mObjectId = System.identityHashCode(lock);
+    }
+
+    public Lock(String className, int objectId) {
+        mClassName = className;
+        mObjectId = objectId;
+    }
+
+    public String toString() {
+        return mClassName + '@' + Integer.toHexString(mObjectId).toUpperCase();
+    }
+
+    public int getObjectId() {
+        return mObjectId;
+    }
+
+    public String getClassName() {
+        return mClassName;
+    }
+
+    public int hashCode() {
+        return mObjectId;
+    }
+
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final Lock other = (Lock) obj;
+        return mObjectId == other.mObjectId
+               && mClassName.equals(other.mClassName);
+    }
+}