104 lines
2.7 KiB
C#
Raw Normal View History

/*
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Copyright (C) 2009-2010 Michael Möller <mmoeller@openhardwaremonitor.org>
*/
using System;
using System.Collections.Generic;
using System.Text;
namespace OpenHardwareMonitor.Hardware {
2010-09-06 19:53:13 +00:00
public class Identifier : IComparable<Identifier> {
private readonly string identifier;
private const char Separator = '/';
private static void CheckIdentifiers(IEnumerable<string> identifiers) {
foreach (string s in identifiers)
if (s.Contains(" ") || s.Contains(Separator.ToString()))
throw new ArgumentException("Invalid identifier");
}
public Identifier(params string[] identifiers) {
CheckIdentifiers(identifiers);
StringBuilder s = new StringBuilder();
for (int i = 0; i < identifiers.Length; i++) {
s.Append(Separator);
s.Append(identifiers[i]);
}
this.identifier = s.ToString();
}
public Identifier(Identifier identifier, params string[] extensions) {
CheckIdentifiers(extensions);
StringBuilder s = new StringBuilder();
s.Append(identifier.ToString());
for (int i = 0; i < extensions.Length; i++) {
s.Append(Separator);
s.Append(extensions[i]);
}
this.identifier = s.ToString();
}
public override string ToString() {
return identifier;
}
public override bool Equals(Object obj) {
if (obj == null)
return false;
Identifier id = obj as Identifier;
if (id == null)
return false;
return (identifier == id.identifier);
}
public override int GetHashCode() {
return identifier.GetHashCode();
}
2010-09-06 19:53:13 +00:00
public int CompareTo(Identifier other) {
if (other == null)
return 1;
else
2010-09-08 19:29:58 +00:00
return string.Compare(this.identifier, other.identifier,
StringComparison.Ordinal);
2010-09-06 19:53:13 +00:00
}
2010-09-08 19:29:58 +00:00
public static bool operator ==(Identifier id1, Identifier id2) {
if (id1.Equals(null))
return id2.Equals(null);
2010-09-08 19:29:58 +00:00
else
return id1.Equals(id2);
}
public static bool operator !=(Identifier id1, Identifier id2) {
return !(id1 == id2);
}
public static bool operator <(Identifier id1, Identifier id2) {
if (id1 == null)
return id2 != null;
else
return (id1.CompareTo(id2) < 0);
}
public static bool operator >(Identifier id1, Identifier id2) {
if (id1 == null)
return false;
else
return (id1.CompareTo(id2) > 0);
}
}
}