Commit 261bc2e5 authored by Nick Craver's avatar Nick Craver

Cleanup: RedisChannel

parent c22916bf
...@@ -10,27 +10,36 @@ public struct RedisChannel : IEquatable<RedisChannel> ...@@ -10,27 +10,36 @@ public struct RedisChannel : IEquatable<RedisChannel>
{ {
internal static readonly RedisChannel[] EmptyArray = new RedisChannel[0]; internal static readonly RedisChannel[] EmptyArray = new RedisChannel[0];
private readonly byte[] value; internal readonly byte[] Value;
internal readonly bool IsPatternBased;
/// <summary>
/// Indicates whether the channel-name is either null or a zero-length value
/// </summary>
public bool IsNullOrEmpty => Value == null || Value.Length == 0;
internal bool IsNull => Value == null;
/// <summary> /// <summary>
/// Create a new redis channel from a buffer, explicitly controlling the pattern mode /// Create a new redis channel from a buffer, explicitly controlling the pattern mode
/// </summary> /// </summary>
public RedisChannel(byte[] value, PatternMode mode) : this(value, DeterminePatternBased(value, mode)) /// <param name="value">The name of the channel to create.</param>
{ /// <param name="mode">The mode for name matching.</param>
} public RedisChannel(byte[] value, PatternMode mode) : this(value, DeterminePatternBased(value, mode)) {}
/// <summary> /// <summary>
/// Create a new redis channel from a string, explicitly controlling the pattern mode /// Create a new redis channel from a string, explicitly controlling the pattern mode
/// </summary> /// </summary>
public RedisChannel(string value, PatternMode mode) : this(value == null ? null : Encoding.UTF8.GetBytes(value), mode) /// <param name="value">The string name of the channel to create.</param>
{ /// <param name="mode">The mode for name matching.</param>
} public RedisChannel(string value, PatternMode mode) : this(value == null ? null : Encoding.UTF8.GetBytes(value), mode) {}
private RedisChannel(byte[] value, bool isPatternBased) private RedisChannel(byte[] value, bool isPatternBased)
{ {
this.value = value; Value = value;
IsPatternBased = isPatternBased; IsPatternBased = isPatternBased;
} }
private static bool DeterminePatternBased(byte[] value, PatternMode mode) private static bool DeterminePatternBased(byte[] value, PatternMode mode)
{ {
switch (mode) switch (mode)
...@@ -44,111 +53,96 @@ private static bool DeterminePatternBased(byte[] value, PatternMode mode) ...@@ -44,111 +53,96 @@ private static bool DeterminePatternBased(byte[] value, PatternMode mode)
} }
} }
/// <summary>
/// Indicates whether the channel-name is either null or a zero-length value
/// </summary>
public bool IsNullOrEmpty => value == null || value.Length == 0;
internal bool IsNull => value == null;
internal byte[] Value => value;
/// <summary> /// <summary>
/// Indicate whether two channel names are not equal /// Indicate whether two channel names are not equal
/// </summary> /// </summary>
public static bool operator !=(RedisChannel x, RedisChannel y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return !(x == y); public static bool operator !=(RedisChannel x, RedisChannel y) => !(x == y);
}
/// <summary> /// <summary>
/// Indicate whether two channel names are not equal /// Indicate whether two channel names are not equal
/// </summary> /// </summary>
public static bool operator !=(string x, RedisChannel y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return !(x == y); public static bool operator !=(string x, RedisChannel y) => !(x == y);
}
/// <summary> /// <summary>
/// Indicate whether two channel names are not equal /// Indicate whether two channel names are not equal
/// </summary> /// </summary>
public static bool operator !=(byte[] x, RedisChannel y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return !(x == y); public static bool operator !=(byte[] x, RedisChannel y) => !(x == y);
}
/// <summary> /// <summary>
/// Indicate whether two channel names are not equal /// Indicate whether two channel names are not equal
/// </summary> /// </summary>
public static bool operator !=(RedisChannel x, string y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return !(x == y); public static bool operator !=(RedisChannel x, string y) => !(x == y);
}
/// <summary> /// <summary>
/// Indicate whether two channel names are not equal /// Indicate whether two channel names are not equal
/// </summary> /// </summary>
public static bool operator !=(RedisChannel x, byte[] y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return !(x == y); public static bool operator !=(RedisChannel x, byte[] y) => !(x == y);
}
/// <summary> /// <summary>
/// Indicate whether two channel names are equal /// Indicate whether two channel names are equal
/// </summary> /// </summary>
public static bool operator ==(RedisChannel x, RedisChannel y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return x.IsPatternBased == y.IsPatternBased && RedisValue.Equals(x.value, y.value); public static bool operator ==(RedisChannel x, RedisChannel y) =>
} x.IsPatternBased == y.IsPatternBased && RedisValue.Equals(x.Value, y.Value);
/// <summary> /// <summary>
/// Indicate whether two channel names are equal /// Indicate whether two channel names are equal
/// </summary> /// </summary>
public static bool operator ==(string x, RedisChannel y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return RedisValue.Equals(x == null ? null : Encoding.UTF8.GetBytes(x), y.value); public static bool operator ==(string x, RedisChannel y) =>
} RedisValue.Equals(x == null ? null : Encoding.UTF8.GetBytes(x), y.Value);
/// <summary> /// <summary>
/// Indicate whether two channel names are equal /// Indicate whether two channel names are equal
/// </summary> /// </summary>
public static bool operator ==(byte[] x, RedisChannel y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return RedisValue.Equals(x, y.value); public static bool operator ==(byte[] x, RedisChannel y) => RedisValue.Equals(x, y.Value);
}
/// <summary> /// <summary>
/// Indicate whether two channel names are equal /// Indicate whether two channel names are equal
/// </summary> /// </summary>
public static bool operator ==(RedisChannel x, string y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return RedisValue.Equals(x.value, y == null ? null : Encoding.UTF8.GetBytes(y)); public static bool operator ==(RedisChannel x, string y) =>
} RedisValue.Equals(x.Value, y == null ? null : Encoding.UTF8.GetBytes(y));
/// <summary> /// <summary>
/// Indicate whether two channel names are equal /// Indicate whether two channel names are equal
/// </summary> /// </summary>
public static bool operator ==(RedisChannel x, byte[] y) /// <param name="x">The first <see cref="RedisChannel"/> to compare.</param>
{ /// <param name="y">The second <see cref="RedisChannel"/> to compare.</param>
return RedisValue.Equals(x.value, y); public static bool operator ==(RedisChannel x, byte[] y) => RedisValue.Equals(x.Value, y);
}
/// <summary> /// <summary>
/// See Object.Equals /// See Object.Equals
/// </summary> /// </summary>
/// <param name="obj">The <see cref="RedisChannel"/> to compare to.</param>
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
if (obj is RedisChannel) if (obj is RedisChannel rcObj)
{ {
return RedisValue.Equals(value, ((RedisChannel)obj).value); return RedisValue.Equals(Value, (rcObj).Value);
} }
if (obj is string) if (obj is string sObj)
{ {
return RedisValue.Equals(value, Encoding.UTF8.GetBytes((string)obj)); return RedisValue.Equals(Value, Encoding.UTF8.GetBytes(sObj));
} }
if (obj is byte[]) if (obj is byte[] bObj)
{ {
return RedisValue.Equals(value, (byte[])obj); return RedisValue.Equals(Value, bObj);
} }
return false; return false;
} }
...@@ -156,19 +150,13 @@ public override bool Equals(object obj) ...@@ -156,19 +150,13 @@ public override bool Equals(object obj)
/// <summary> /// <summary>
/// Indicate whether two channel names are equal /// Indicate whether two channel names are equal
/// </summary> /// </summary>
public bool Equals(RedisChannel other) /// <param name="other">The <see cref="RedisChannel"/> to compare to.</param>
{ public bool Equals(RedisChannel other) => IsPatternBased == other.IsPatternBased && RedisValue.Equals(Value, other.Value);
return IsPatternBased == other.IsPatternBased &&
RedisValue.Equals(value, other.value);
}
/// <summary> /// <summary>
/// See Object.GetHashCode /// See Object.GetHashCode
/// </summary> /// </summary>
public override int GetHashCode() public override int GetHashCode() => RedisValue.GetHashCode(Value) + (IsPatternBased ? 1 : 0);
{
return RedisValue.GetHashCode(value) + (IsPatternBased ? 1 : 0);
}
/// <summary> /// <summary>
/// Obtains a string representation of the channel name /// Obtains a string representation of the channel name
...@@ -192,13 +180,7 @@ internal void AssertNotNull() ...@@ -192,13 +180,7 @@ internal void AssertNotNull()
if (IsNull) throw new ArgumentException("A null key is not valid in this context"); if (IsNull) throw new ArgumentException("A null key is not valid in this context");
} }
internal RedisChannel Clone() internal RedisChannel Clone() => (byte[])Value?.Clone();
{
byte[] clone = (byte[]) value?.Clone();
return clone;
}
internal readonly bool IsPatternBased;
/// <summary> /// <summary>
/// The matching pattern for this channel /// The matching pattern for this channel
...@@ -218,35 +200,40 @@ public enum PatternMode ...@@ -218,35 +200,40 @@ public enum PatternMode
/// </summary> /// </summary>
Pattern = 2 Pattern = 2
} }
/// <summary> /// <summary>
/// Create a channel name from a String /// Create a channel name from a <see cref="string"/>.
/// </summary> /// </summary>
/// <param name="key">The string to get a channel from.</param>
public static implicit operator RedisChannel(string key) public static implicit operator RedisChannel(string key)
{ {
if (key == null) return default(RedisChannel); if (key == null) return default(RedisChannel);
return new RedisChannel(Encoding.UTF8.GetBytes(key), PatternMode.Auto); return new RedisChannel(Encoding.UTF8.GetBytes(key), PatternMode.Auto);
} }
/// <summary> /// <summary>
/// Create a channel name from a Byte[] /// Create a channel name from a <see cref="T:byte[]"/>.
/// </summary> /// </summary>
/// <param name="key">The byte array to get a channel from.</param>
public static implicit operator RedisChannel(byte[] key) public static implicit operator RedisChannel(byte[] key)
{ {
if (key == null) return default(RedisChannel); if (key == null) return default(RedisChannel);
return new RedisChannel(key, PatternMode.Auto); return new RedisChannel(key, PatternMode.Auto);
} }
/// <summary> /// <summary>
/// Obtain the channel name as a Byte[] /// Obtain the channel name as a <see cref="T:byte[]"/>.
/// </summary> /// </summary>
public static implicit operator byte[] (RedisChannel key) /// <param name="key">The channel to get a byte[] from.</param>
{ public static implicit operator byte[] (RedisChannel key) => key.Value;
return key.value;
}
/// <summary> /// <summary>
/// Obtain the channel name as a String /// Obtain the channel name as a <see cref="string"/>.
/// </summary> /// </summary>
/// <param name="key">The channel to get a string from.</param>
public static implicit operator string (RedisChannel key) public static implicit operator string (RedisChannel key)
{ {
var arr = key.value; var arr = key.Value;
if (arr == null) return null; if (arr == null) return null;
try try
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment