Commit fe8544b2 authored by Jeremy Meng's avatar Jeremy Meng

Attempt to fix the whitespace/encoding issue with Emacs.

parent 790bb080
.hg .hg
bin bin
bin.snk bin.snk
obj obj
*.suo *.suo
*.user *.user
*.nupkg *.nupkg
packages/NuGet.CommandLine.* packages/NuGet.CommandLine.*
*.sln.docstates *.sln.docstates
_ReSharper.* _ReSharper.*
Mono/ Mono/
*.sln.ide *.sln.ide
*.rdb *.rdb
*.aof *.aof
*.orig *.orig
redis-cli.exe redis-cli.exe
Redis Configs/*.dat Redis Configs/*.dat
RedisQFork*.dat RedisQFork*.dat
StackExchange.Redis.*.zip StackExchange.Redis.*.zip
.vs/ .vs/
*.lock.json *.lock.json
\ No newline at end of file
This diff is collapsed.
using System; using System;
using NUnit.Framework; using NUnit.Framework;
using StackExchange.Redis.KeyspaceIsolation; using StackExchange.Redis.KeyspaceIsolation;
namespace StackExchange.Redis.Tests namespace StackExchange.Redis.Tests
{ {
[TestFixture] [TestFixture]
public class WithKeyPrefixTests : TestBase public class WithKeyPrefixTests : TestBase
{ {
[Test] [Test]
public void BlankPrefixYieldsSame_Bytes() public void BlankPrefixYieldsSame_Bytes()
{ {
using (var conn = Create()) using (var conn = Create())
{ {
var raw = conn.GetDatabase(1); var raw = conn.GetDatabase(1);
var prefixed = raw.WithKeyPrefix(new byte[0]); var prefixed = raw.WithKeyPrefix(new byte[0]);
Assert.AreSame(raw, prefixed); Assert.AreSame(raw, prefixed);
} }
} }
[Test] [Test]
public void BlankPrefixYieldsSame_String() public void BlankPrefixYieldsSame_String()
{ {
using (var conn = Create()) using (var conn = Create())
{ {
var raw = conn.GetDatabase(1); var raw = conn.GetDatabase(1);
var prefixed = raw.WithKeyPrefix(""); var prefixed = raw.WithKeyPrefix("");
Assert.AreSame(raw, prefixed); Assert.AreSame(raw, prefixed);
} }
} }
[Test] [Test]
public void NullPrefixIsError_Bytes() public void NullPrefixIsError_Bytes()
{ {
Assert.Throws<ArgumentNullException>(() => { Assert.Throws<ArgumentNullException>(() => {
using (var conn = Create()) using (var conn = Create())
{ {
var raw = conn.GetDatabase(1); var raw = conn.GetDatabase(1);
var prefixed = raw.WithKeyPrefix((byte[])null); var prefixed = raw.WithKeyPrefix((byte[])null);
} }
}); });
} }
[Test]
[Test] public void NullPrefixIsError_String()
public void NullPrefixIsError_String() {
{ Assert.Throws<ArgumentNullException>(() => {
Assert.Throws<ArgumentNullException>(() => { using (var conn = Create())
using (var conn = Create()) {
{ var raw = conn.GetDatabase(1);
var raw = conn.GetDatabase(1); var prefixed = raw.WithKeyPrefix((string)null);
var prefixed = raw.WithKeyPrefix((string)null); }
} });
}); }
}
[Test]
[Test] [TestCase("abc")]
[TestCase("abc")] [TestCase("")]
[TestCase("")] [TestCase(null)]
[TestCase(null)] public void NullDatabaseIsError(string prefix)
public void NullDatabaseIsError(string prefix) {
{ Assert.Throws<ArgumentNullException>(() => {
Assert.Throws<ArgumentNullException>(() => { IDatabase raw = null;
IDatabase raw = null; var prefixed = raw.WithKeyPrefix(prefix);
var prefixed = raw.WithKeyPrefix(prefix); });
}); }
} [Test]
public void BasicSmokeTest()
[Test] {
public void BasicSmokeTest() using(var conn = Create())
{ {
using(var conn = Create()) var raw = conn.GetDatabase(1);
{
var raw = conn.GetDatabase(1); var foo = raw.WithKeyPrefix("foo");
var foobar = foo.WithKeyPrefix("bar");
var foo = raw.WithKeyPrefix("foo");
var foobar = foo.WithKeyPrefix("bar"); string key = Me();
string key = Me(); string s = Guid.NewGuid().ToString(), t = Guid.NewGuid().ToString();
string s = Guid.NewGuid().ToString(), t = Guid.NewGuid().ToString(); foo.StringSet(key, s);
var val = (string)foo.StringGet(key);
foo.StringSet(key, s); Assert.AreEqual(s, val); // fooBasicSmokeTest
var val = (string)foo.StringGet(key);
Assert.AreEqual(s, val); // fooBasicSmokeTest foobar.StringSet(key, t);
val = (string)foobar.StringGet(key);
foobar.StringSet(key, t); Assert.AreEqual(t, val); // foobarBasicSmokeTest
val = (string)foobar.StringGet(key);
Assert.AreEqual(t, val); // foobarBasicSmokeTest val = (string)foo.StringGet("bar" + key);
Assert.AreEqual(t, val); // foobarBasicSmokeTest
val = (string)foo.StringGet("bar" + key);
Assert.AreEqual(t, val); // foobarBasicSmokeTest val = (string)raw.StringGet("foo" + key);
Assert.AreEqual(s, val); // fooBasicSmokeTest
val = (string)raw.StringGet("foo" + key);
Assert.AreEqual(s, val); // fooBasicSmokeTest val = (string)raw.StringGet("foobar" + key);
Assert.AreEqual(t, val); // foobarBasicSmokeTest
val = (string)raw.StringGet("foobar" + key); }
Assert.AreEqual(t, val); // foobarBasicSmokeTest }
} [Test]
} public void ConditionTest()
[Test] {
public void ConditionTest() using(var conn = Create())
{ {
using(var conn = Create()) var raw = conn.GetDatabase(2);
{
var raw = conn.GetDatabase(2); var foo = raw.WithKeyPrefix("tran:");
var foo = raw.WithKeyPrefix("tran:"); raw.KeyDelete("tran:abc");
raw.KeyDelete("tran:i");
raw.KeyDelete("tran:abc");
raw.KeyDelete("tran:i"); // execute while key exists
raw.StringSet("tran:abc", "def");
// execute while key exists var tran = foo.CreateTransaction();
raw.StringSet("tran:abc", "def"); tran.AddCondition(Condition.KeyExists("abc"));
var tran = foo.CreateTransaction(); tran.StringIncrementAsync("i");
tran.AddCondition(Condition.KeyExists("abc")); tran.Execute();
tran.StringIncrementAsync("i");
tran.Execute(); int i = (int)raw.StringGet("tran:i");
Assert.AreEqual(1, i);
int i = (int)raw.StringGet("tran:i");
Assert.AreEqual(1, i); // repeat without key
raw.KeyDelete("tran:abc");
// repeat without key tran = foo.CreateTransaction();
raw.KeyDelete("tran:abc"); tran.AddCondition(Condition.KeyExists("abc"));
tran = foo.CreateTransaction(); tran.StringIncrementAsync("i");
tran.AddCondition(Condition.KeyExists("abc")); tran.Execute();
tran.StringIncrementAsync("i");
tran.Execute(); i = (int)raw.StringGet("tran:i");
Assert.AreEqual(1, i);
i = (int)raw.StringGet("tran:i"); }
Assert.AreEqual(1, i); }
} }
} }
}
}
...@@ -16,7 +16,6 @@ public sealed class WrapperBaseTests ...@@ -16,7 +16,6 @@ public sealed class WrapperBaseTests
private Mock<IDatabaseAsync> mock; private Mock<IDatabaseAsync> mock;
private WrapperBase<IDatabaseAsync> wrapper; private WrapperBase<IDatabaseAsync> wrapper;
//[TestFixtureSetUp]
[OneTimeSetUp] [OneTimeSetUp]
public void Initialize() public void Initialize()
{ {
...@@ -891,4 +890,4 @@ public void StringSetRangeAsync() ...@@ -891,4 +890,4 @@ public void StringSetRangeAsync()
} }
} }
} }
#endif #endif
\ No newline at end of file
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace StackExchange.Redis namespace StackExchange.Redis
{ {
/// <summary> /// <summary>
/// Utility methods /// Utility methods
/// </summary> /// </summary>
public static class ExtensionMethods public static class ExtensionMethods
{ {
/// <summary> /// <summary>
/// Create a dictionary from an array of HashEntry values /// Create a dictionary from an array of HashEntry values
/// </summary> /// </summary>
public static Dictionary<string,string> ToStringDictionary(this HashEntry[] hash) public static Dictionary<string,string> ToStringDictionary(this HashEntry[] hash)
{ {
if (hash == null) return null; if (hash == null) return null;
var result = new Dictionary<string, string>(hash.Length, StringComparer.Ordinal); var result = new Dictionary<string, string>(hash.Length, StringComparer.Ordinal);
for(int i = 0; i < hash.Length; i++) for(int i = 0; i < hash.Length; i++)
{ {
result.Add(hash[i].name, hash[i].value); result.Add(hash[i].name, hash[i].value);
} }
return result; return result;
} }
/// <summary> /// <summary>
/// Create a dictionary from an array of HashEntry values /// Create a dictionary from an array of HashEntry values
/// </summary> /// </summary>
public static Dictionary<RedisValue, RedisValue> ToDictionary(this HashEntry[] hash) public static Dictionary<RedisValue, RedisValue> ToDictionary(this HashEntry[] hash)
{ {
if (hash == null) return null; if (hash == null) return null;
var result = new Dictionary<RedisValue, RedisValue>(hash.Length); var result = new Dictionary<RedisValue, RedisValue>(hash.Length);
for (int i = 0; i < hash.Length; i++) for (int i = 0; i < hash.Length; i++)
{ {
result.Add(hash[i].name, hash[i].value); result.Add(hash[i].name, hash[i].value);
} }
return result; return result;
} }
/// <summary> /// <summary>
/// Create a dictionary from an array of SortedSetEntry values /// Create a dictionary from an array of SortedSetEntry values
/// </summary> /// </summary>
public static Dictionary<string, double> ToStringDictionary(this SortedSetEntry[] sortedSet) public static Dictionary<string, double> ToStringDictionary(this SortedSetEntry[] sortedSet)
{ {
if (sortedSet == null) return null; if (sortedSet == null) return null;
var result = new Dictionary<string, double>(sortedSet.Length, StringComparer.Ordinal); var result = new Dictionary<string, double>(sortedSet.Length, StringComparer.Ordinal);
for (int i = 0; i < sortedSet.Length; i++) for (int i = 0; i < sortedSet.Length; i++)
{ {
result.Add(sortedSet[i].element, sortedSet[i].score); result.Add(sortedSet[i].element, sortedSet[i].score);
} }
return result; return result;
} }
/// <summary> /// <summary>
/// Create a dictionary from an array of SortedSetEntry values /// Create a dictionary from an array of SortedSetEntry values
/// </summary> /// </summary>
public static Dictionary<RedisValue, double> ToDictionary(this SortedSetEntry[] sortedSet) public static Dictionary<RedisValue, double> ToDictionary(this SortedSetEntry[] sortedSet)
{ {
if (sortedSet == null) return null; if (sortedSet == null) return null;
var result = new Dictionary<RedisValue, double>(sortedSet.Length); var result = new Dictionary<RedisValue, double>(sortedSet.Length);
for (int i = 0; i < sortedSet.Length; i++) for (int i = 0; i < sortedSet.Length; i++)
{ {
result.Add(sortedSet[i].element, sortedSet[i].score); result.Add(sortedSet[i].element, sortedSet[i].score);
} }
return result; return result;
} }
/// <summary> /// <summary>
/// Create a dictionary from an array of key/value pairs /// Create a dictionary from an array of key/value pairs
/// </summary> /// </summary>
public static Dictionary<string, string> ToStringDictionary(this KeyValuePair<RedisKey, RedisValue>[] pairs) public static Dictionary<string, string> ToStringDictionary(this KeyValuePair<RedisKey, RedisValue>[] pairs)
{ {
if (pairs == null) return null; if (pairs == null) return null;
var result = new Dictionary<string, string>(pairs.Length, StringComparer.Ordinal); var result = new Dictionary<string, string>(pairs.Length, StringComparer.Ordinal);
for (int i = 0; i < pairs.Length; i++) for (int i = 0; i < pairs.Length; i++)
{ {
result.Add(pairs[i].Key, pairs[i].Value); result.Add(pairs[i].Key, pairs[i].Value);
} }
return result; return result;
} }
/// <summary> /// <summary>
/// Create a dictionary from an array of key/value pairs /// Create a dictionary from an array of key/value pairs
/// </summary> /// </summary>
public static Dictionary<RedisKey, RedisValue> ToDictionary(this KeyValuePair<RedisKey, RedisValue>[] pairs) public static Dictionary<RedisKey, RedisValue> ToDictionary(this KeyValuePair<RedisKey, RedisValue>[] pairs)
{ {
if (pairs == null) return null; if (pairs == null) return null;
var result = new Dictionary<RedisKey, RedisValue>(pairs.Length); var result = new Dictionary<RedisKey, RedisValue>(pairs.Length);
for (int i = 0; i < pairs.Length; i++) for (int i = 0; i < pairs.Length; i++)
{ {
result.Add(pairs[i].Key, pairs[i].Value); result.Add(pairs[i].Key, pairs[i].Value);
} }
return result; return result;
} }
/// <summary> /// <summary>
/// Create a dictionary from an array of string pairs /// Create a dictionary from an array of string pairs
/// </summary> /// </summary>
public static Dictionary<string, string> ToDictionary(this KeyValuePair<string, string>[] pairs) public static Dictionary<string, string> ToDictionary(this KeyValuePair<string, string>[] pairs)
{ {
if (pairs == null) return null; if (pairs == null) return null;
var result = new Dictionary<string, string>(pairs.Length, StringComparer.Ordinal); var result = new Dictionary<string, string>(pairs.Length, StringComparer.Ordinal);
for (int i = 0; i < pairs.Length; i++) for (int i = 0; i < pairs.Length; i++)
{ {
result.Add(pairs[i].Key, pairs[i].Value); result.Add(pairs[i].Key, pairs[i].Value);
} }
return result; return result;
} }
static readonly string[] nix = new string[0]; static readonly string[] nix = new string[0];
/// <summary> /// <summary>
/// Create an array of strings from an array of values /// Create an array of strings from an array of values
/// </summary> /// </summary>
public static string[] ToStringArray(this RedisValue[] values) public static string[] ToStringArray(this RedisValue[] values)
{ {
if (values == null) return null; if (values == null) return null;
if (values.Length == 0) return nix; if (values.Length == 0) return nix;
return ConvertHelper.ConvertAll(values, x => (string)x); return ConvertHelper.ConvertAll(values, x => (string)x);
} }
} }
} }
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
namespace StackExchange.Redis namespace StackExchange.Redis
{ {
/// <summary> /// <summary>
/// Describes a hash-field (a name/value pair) /// Describes a hash-field (a name/value pair)
/// </summary> /// </summary>
public struct HashEntry : IEquatable<HashEntry> public struct HashEntry : IEquatable<HashEntry>
{ {
internal readonly RedisValue name, value; internal readonly RedisValue name, value;
/// <summary> /// <summary>
/// Initializes a HashEntry value /// Initializes a HashEntry value
/// </summary> /// </summary>
public HashEntry(RedisValue name, RedisValue value) public HashEntry(RedisValue name, RedisValue value)
{ {
this.name = name; this.name = name;
this.value = value; this.value = value;
} }
/// <summary> /// <summary>
/// The name of the hash field /// The name of the hash field
/// </summary> /// </summary>
public RedisValue Name { get { return name; } } public RedisValue Name { get { return name; } }
/// <summary> /// <summary>
/// The value of the hash field /// The value of the hash field
/// </summary> /// </summary>
public RedisValue Value{ get { return value; } } public RedisValue Value{ get { return value; } }
/// <summary> /// <summary>
/// The name of the hash field /// The name of the hash field
/// </summary> /// </summary>
#if !DNXCORE50 #if !DNXCORE50
[Browsable(false)] [Browsable(false)]
#endif #endif
[EditorBrowsable(EditorBrowsableState.Never), Obsolete("Please use Name", false)] [EditorBrowsable(EditorBrowsableState.Never), Obsolete("Please use Name", false)]
public RedisValue Key { get { return name; } } public RedisValue Key { get { return name; } }
/// <summary> /// <summary>
/// Converts to a key/value pair /// Converts to a key/value pair
/// </summary> /// </summary>
public static implicit operator KeyValuePair<RedisValue, RedisValue>(HashEntry value) public static implicit operator KeyValuePair<RedisValue, RedisValue>(HashEntry value)
{ {
return new KeyValuePair<RedisValue, RedisValue>(value.name, value.value); return new KeyValuePair<RedisValue, RedisValue>(value.name, value.value);
} }
/// <summary> /// <summary>
/// Converts from a key/value pair /// Converts from a key/value pair
/// </summary> /// </summary>
public static implicit operator HashEntry(KeyValuePair<RedisValue, RedisValue> value) public static implicit operator HashEntry(KeyValuePair<RedisValue, RedisValue> value)
{ {
return new HashEntry(value.Key, value.Value); return new HashEntry(value.Key, value.Value);
} }
/// <summary> /// <summary>
/// See Object.ToString() /// See Object.ToString()
/// </summary> /// </summary>
public override string ToString() public override string ToString()
{ {
return name + ": " + value; return name + ": " + value;
} }
/// <summary> /// <summary>
/// See Object.GetHashCode() /// See Object.GetHashCode()
/// </summary> /// </summary>
public override int GetHashCode() public override int GetHashCode()
{ {
return name.GetHashCode() ^ value.GetHashCode(); return name.GetHashCode() ^ value.GetHashCode();
} }
/// <summary> /// <summary>
/// Compares two values for equality /// Compares two values for equality
/// </summary> /// </summary>
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is HashEntry && Equals((HashEntry)obj); return obj is HashEntry && Equals((HashEntry)obj);
} }
/// <summary> /// <summary>
/// Compares two values for equality /// Compares two values for equality
/// </summary> /// </summary>
public bool Equals(HashEntry value) public bool Equals(HashEntry value)
{ {
return this.name == value.name && this.value == value.value; return this.name == value.name && this.value == value.value;
} }
/// <summary> /// <summary>
/// Compares two values for equality /// Compares two values for equality
/// </summary> /// </summary>
public static bool operator ==(HashEntry x, HashEntry y) public static bool operator ==(HashEntry x, HashEntry y)
{ {
return x.name == y.name && x.value == y.value; return x.name == y.name && x.value == y.value;
} }
/// <summary> /// <summary>
/// Compares two values for non-equality /// Compares two values for non-equality
/// </summary> /// </summary>
public static bool operator !=(HashEntry x, HashEntry y) public static bool operator !=(HashEntry x, HashEntry y)
{ {
return x.name != y.name || x.value != y.value; return x.name != y.name || x.value != y.value;
} }
} }
} }
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
namespace StackExchange.Redis namespace StackExchange.Redis
{ {
/// <summary> /// <summary>
/// Describes a sorted-set element with the corresponding value /// Describes a sorted-set element with the corresponding value
/// </summary> /// </summary>
public struct SortedSetEntry : IEquatable<SortedSetEntry>, IComparable, IComparable<SortedSetEntry> public struct SortedSetEntry : IEquatable<SortedSetEntry>, IComparable, IComparable<SortedSetEntry>
{ {
internal readonly RedisValue element; internal readonly RedisValue element;
internal readonly double score; internal readonly double score;
/// <summary> /// <summary>
/// Initializes a SortedSetEntry value /// Initializes a SortedSetEntry value
/// </summary> /// </summary>
public SortedSetEntry(RedisValue element, double score) public SortedSetEntry(RedisValue element, double score)
{ {
this.element = element; this.element = element;
this.score = score; this.score = score;
} }
/// <summary> /// <summary>
/// The unique element stored in the sorted set /// The unique element stored in the sorted set
/// </summary> /// </summary>
public RedisValue Element { get { return element; } } public RedisValue Element { get { return element; } }
/// <summary> /// <summary>
/// The score against the element /// The score against the element
/// </summary> /// </summary>
public double Score { get { return score; } } public double Score { get { return score; } }
/// <summary> /// <summary>
/// The score against the element /// The score against the element
/// </summary> /// </summary>
#if !DNXCORE50 #if !DNXCORE50
[Browsable(false)] [Browsable(false)]
#endif #endif
[EditorBrowsable(EditorBrowsableState.Never), Obsolete("Please use Score", false)] [EditorBrowsable(EditorBrowsableState.Never), Obsolete("Please use Score", false)]
public double Value { get { return score; } } public double Value { get { return score; } }
/// <summary> /// <summary>
/// The unique element stored in the sorted set /// The unique element stored in the sorted set
/// </summary> /// </summary>
#if !DNXCORE50 #if !DNXCORE50
[Browsable(false)] [Browsable(false)]
#endif #endif
[EditorBrowsable(EditorBrowsableState.Never), Obsolete("Please use Element", false)] [EditorBrowsable(EditorBrowsableState.Never), Obsolete("Please use Element", false)]
public RedisValue Key { get { return element; } } public RedisValue Key { get { return element; } }
/// <summary> /// <summary>
/// Converts to a key/value pair /// Converts to a key/value pair
/// </summary> /// </summary>
public static implicit operator KeyValuePair<RedisValue,double>(SortedSetEntry value) public static implicit operator KeyValuePair<RedisValue,double>(SortedSetEntry value)
{ {
return new KeyValuePair<RedisValue, double>(value.element, value.score); return new KeyValuePair<RedisValue, double>(value.element, value.score);
} }
/// <summary> /// <summary>
/// Converts from a key/value pair /// Converts from a key/value pair
/// </summary> /// </summary>
public static implicit operator SortedSetEntry(KeyValuePair<RedisValue, double> value) public static implicit operator SortedSetEntry(KeyValuePair<RedisValue, double> value)
{ {
return new SortedSetEntry(value.Key, value.Value); return new SortedSetEntry(value.Key, value.Value);
} }
/// <summary> /// <summary>
/// See Object.ToString() /// See Object.ToString()
/// </summary> /// </summary>
public override string ToString() public override string ToString()
{ {
return element + ": " + score; return element + ": " + score;
} }
/// <summary> /// <summary>
/// See Object.GetHashCode() /// See Object.GetHashCode()
/// </summary> /// </summary>
public override int GetHashCode() public override int GetHashCode()
{ {
return element.GetHashCode() ^ score.GetHashCode(); return element.GetHashCode() ^ score.GetHashCode();
} }
/// <summary> /// <summary>
/// Compares two values for equality /// Compares two values for equality
/// </summary> /// </summary>
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is SortedSetEntry && Equals((SortedSetEntry)obj); return obj is SortedSetEntry && Equals((SortedSetEntry)obj);
} }
/// <summary> /// <summary>
/// Compares two values for equality /// Compares two values for equality
/// </summary> /// </summary>
public bool Equals(SortedSetEntry value) public bool Equals(SortedSetEntry value)
{ {
return this.score == value.score && this.element == value.element; return this.score == value.score && this.element == value.element;
} }
/// <summary> /// <summary>
/// Compares two values by score /// Compares two values by score
/// </summary> /// </summary>
public int CompareTo(SortedSetEntry value) public int CompareTo(SortedSetEntry value)
{ {
return this.score.CompareTo(value.score); return this.score.CompareTo(value.score);
} }
/// <summary> /// <summary>
/// Compares two values by score /// Compares two values by score
/// </summary> /// </summary>
public int CompareTo(object value) public int CompareTo(object value)
{ {
return value is SortedSetEntry ? CompareTo((SortedSetEntry)value) : -1; return value is SortedSetEntry ? CompareTo((SortedSetEntry)value) : -1;
} }
/// <summary> /// <summary>
/// Compares two values for equality /// Compares two values for equality
/// </summary> /// </summary>
public static bool operator ==(SortedSetEntry x, SortedSetEntry y) public static bool operator ==(SortedSetEntry x, SortedSetEntry y)
{ {
return x.score == y.score && x.element == y.element; return x.score == y.score && x.element == y.element;
} }
/// <summary> /// <summary>
/// Compares two values for non-equality /// Compares two values for non-equality
/// </summary> /// </summary>
public static bool operator !=(SortedSetEntry x, SortedSetEntry y) public static bool operator !=(SortedSetEntry x, SortedSetEntry y)
{ {
return x.score != y.score || x.element != y.element; return x.score != y.score || x.element != y.element;
} }
} }
} }
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