Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

139 lines
3.8 KiB
C#

//
// System.ApplicationId class
//
// Author:
// Sebastien Pouliot <sebastien@ximian.com>
//
// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System.Runtime.InteropServices;
using System.Text;
namespace System {
[Serializable]
[ComVisible (true)]
public sealed class ApplicationId {
private byte[] _token;
private string _name;
private Version _version;
private string _proc;
private string _culture;
public ApplicationId (byte[] publicKeyToken, string name, Version version, string processorArchitecture, string culture)
{
if (publicKeyToken == null)
throw new ArgumentNullException ("publicKeyToken");
if (name == null)
throw new ArgumentNullException ("name");
if (version == null)
throw new ArgumentNullException ("version");
_token = (byte[]) publicKeyToken.Clone ();
_name = name;
_version = version;
_proc = processorArchitecture;
_culture = culture;
}
// properties
public string Culture {
get { return _culture; }
}
public string Name {
get { return _name; }
}
public string ProcessorArchitecture {
get { return _proc; }
}
public byte[] PublicKeyToken {
get { return (byte[]) _token.Clone (); }
}
public Version Version {
get { return _version; }
}
// methods
public ApplicationId Copy ()
{
return new ApplicationId (_token, _name, _version, _proc, _culture);
}
public override bool Equals (object o)
{
if (o == null)
return false;
ApplicationId appid = (o as ApplicationId);
if (appid == null)
return false;
if (_name != appid._name)
return false;
if (_proc != appid._proc)
return false;
if (_culture != appid._culture)
return false;
if (!_version.Equals (appid._version))
return false;
if (_token.Length != appid._token.Length)
return false;
for (int i=0; i < _token.Length; i++)
if (_token [i] != appid._token [i])
return false;
return true;
}
public override int GetHashCode ()
{
int code = _name.GetHashCode () ^ _version.GetHashCode ();
for (int i=0; i < _token.Length; i++)
code ^= _token [i];
// ProcessorArchitecture and Culture aren't part of the hash code
// Confirmed by Microsoft in FDBK13339
return code;
}
public override string ToString ()
{
StringBuilder sb = new StringBuilder ();
sb.Append (_name);
if (_culture != null)
sb.AppendFormat (", culture=\"{0}\"", _culture);
sb.AppendFormat (", version=\"{0}\", publicKeyToken=\"", _version);
for (int i=0; i < _token.Length; i++)
sb.Append (_token [i].ToString ("X2"));
if (_proc != null)
sb.AppendFormat ("\", processorArchitecture =\"{0}\"", _proc);
else
sb.Append ("\"");
return sb.ToString ();
}
}
}