summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2009-07-06 14:42:03 +0000
committerTed Ross <tross@apache.org>2009-07-06 14:42:03 +0000
commit306ff6372fd8108ee47e2f026339a857775d5240 (patch)
tree718d127b8a07a854375e490eaa97b114bf4fc178
parentf85bf58ec06ab48bb1cca96a261e3fb13063767a (diff)
downloadqpid-python-306ff6372fd8108ee47e2f026339a857775d5240.tar.gz
QPID-1897 - Patch from Julien Lavigne du Cadet
ToString() on UUID class should override and not hide Object.ToString() git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@791494 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/dotnet/client-010/client/transport/util/UUID.cs41
-rw-r--r--qpid/dotnet/client-010/test/transport/util/UUIDTest.cs21
2 files changed, 59 insertions, 3 deletions
diff --git a/qpid/dotnet/client-010/client/transport/util/UUID.cs b/qpid/dotnet/client-010/client/transport/util/UUID.cs
index 788c5b99c8..ff237f689e 100644
--- a/qpid/dotnet/client-010/client/transport/util/UUID.cs
+++ b/qpid/dotnet/client-010/client/transport/util/UUID.cs
@@ -28,6 +28,7 @@ namespace org.apache.qpid.transport.util
private long _mostSigBits;
private long _leastSigBits;
+ private static readonly Random _random = new Random();
public UUID(long mostSigBits, long leastSigBits)
@@ -61,8 +62,7 @@ namespace org.apache.qpid.transport.util
public static UUID randomUUID()
{
byte[] randomBytes = new byte[16];
- Random random = new Random();
- random.NextBytes(randomBytes);
+ _random.NextBytes(randomBytes);
randomBytes[6] &= 0x0f;
randomBytes[6] |= 0x40;
randomBytes[8] &= 0x3f;
@@ -70,7 +70,7 @@ namespace org.apache.qpid.transport.util
return new UUID(randomBytes);
}
- public new String ToString()
+ public override String ToString()
{
return (digits(_mostSigBits >> 32, 8) + "-" +
digits(_mostSigBits >> 16, 4) + "-" +
@@ -84,5 +84,40 @@ namespace org.apache.qpid.transport.util
long hi = 1L << (digits * 4);
return Convert.ToString((hi | (val & (hi - 1))), 16);
}
+
+ #region equality
+ public bool Equals(UUID other)
+ {
+ if (ReferenceEquals(null, other)) return false;
+ if (ReferenceEquals(this, other)) return true;
+ return other._mostSigBits == _mostSigBits && other._leastSigBits == _leastSigBits;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (ReferenceEquals(null, obj)) return false;
+ if (ReferenceEquals(this, obj)) return true;
+ if (obj.GetType() != typeof (UUID)) return false;
+ return Equals((UUID) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ unchecked
+ {
+ return (_mostSigBits.GetHashCode()*397) ^ _leastSigBits.GetHashCode();
+ }
+ }
+
+ public static bool operator ==(UUID left, UUID right)
+ {
+ return Equals(left, right);
+ }
+
+ public static bool operator !=(UUID left, UUID right)
+ {
+ return !Equals(left, right);
+ }
+ #endregion
}
}
diff --git a/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs b/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs
index c073f1139a..83faec49f8 100644
--- a/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs
+++ b/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs
@@ -37,5 +37,26 @@ namespace test.transport.util
UUID uuid2 = UUID.randomUUID();
Assert.AreNotSame(uuid, uuid2);
}
+
+ [Test]
+ public void ToString_should_override_and_not_hide_base()
+ {
+ UUID uuid = UUID.randomUUID();
+
+ string uuidStr = uuid.ToString();
+ string uuidConcat = "Test." + uuid;
+
+ Assert.AreEqual("Test." + uuidStr, uuidConcat);
+ }
+
+ [Test]
+ public void two_uuid_with_same_value_should_have_same_hash_code()
+ {
+ UUID uuid = UUID.randomUUID();
+ UUID uuid2 = new UUID(uuid.MostSignificantBits, uuid.LeastSignificantBits);
+
+ Assert.AreEqual(uuid, uuid2);
+ Assert.AreEqual(uuid.GetHashCode(), uuid2.GetHashCode());
+ }
}
}