Hardware/Identifier.cs
author moel.mich
Tue, 25 May 2010 18:57:28 +0000
changeset 127 76aaf45a01c7
child 167 b7cc9d09aefe
permissions -rw-r--r--
Added a workaround for the "You must keep the stream open for the lifetime of the Image." problem of the Image.FromStream method. This also reduced the overall memory usage (private working set).
moel@109
     1
/*
moel@109
     2
  
moel@109
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@109
     4
moel@109
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@109
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@109
     7
  the License. You may obtain a copy of the License at
moel@109
     8
 
moel@109
     9
  http://www.mozilla.org/MPL/
moel@109
    10
moel@109
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@109
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@109
    13
  for the specific language governing rights and limitations under the License.
moel@109
    14
moel@109
    15
  The Original Code is the Open Hardware Monitor code.
moel@109
    16
moel@109
    17
  The Initial Developer of the Original Code is 
moel@109
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@109
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2010
moel@109
    20
  the Initial Developer. All Rights Reserved.
moel@109
    21
moel@109
    22
  Contributor(s):
moel@109
    23
moel@109
    24
  Alternatively, the contents of this file may be used under the terms of
moel@109
    25
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@109
    26
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@109
    27
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@109
    28
  of those above. If you wish to allow use of your version of this file only
moel@109
    29
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@109
    30
  use your version of this file under the terms of the MPL, indicate your
moel@109
    31
  decision by deleting the provisions above and replace them with the notice
moel@109
    32
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@109
    33
  the provisions above, a recipient may use your version of this file under
moel@109
    34
  the terms of any one of the MPL, the GPL or the LGPL.
moel@109
    35
 
moel@109
    36
*/
moel@109
    37
moel@109
    38
using System;
moel@109
    39
using System.Collections.Generic;
moel@109
    40
using System.Text;
moel@109
    41
moel@109
    42
namespace OpenHardwareMonitor.Hardware {
moel@109
    43
  public class Identifier {
moel@109
    44
    private string identifier;
moel@109
    45
moel@109
    46
    private static char SEPARATOR = '/';
moel@109
    47
moel@109
    48
    private void CheckIdentifiers(string[] identifiers) {
moel@109
    49
      foreach (string s in identifiers)
moel@109
    50
        if (s.Contains(" ") || s.Contains(SEPARATOR.ToString()))
moel@109
    51
          throw new ArgumentException("Invalid identifier");
moel@109
    52
    }
moel@109
    53
moel@109
    54
    public Identifier(params string[] identifiers) {
moel@109
    55
      CheckIdentifiers(identifiers);
moel@109
    56
moel@109
    57
      StringBuilder s = new StringBuilder();
moel@109
    58
      for (int i = 0; i < identifiers.Length; i++) {
moel@109
    59
        s.Append(SEPARATOR);
moel@109
    60
        s.Append(identifiers[i]);
moel@109
    61
      }
moel@109
    62
      this.identifier = s.ToString();
moel@109
    63
    }
moel@109
    64
moel@109
    65
    public Identifier(Identifier identifier, params string[] extensions) {
moel@109
    66
      CheckIdentifiers(extensions);
moel@109
    67
moel@109
    68
      StringBuilder s = new StringBuilder();
moel@109
    69
      s.Append(identifier.ToString());
moel@109
    70
      for (int i = 0; i < extensions.Length; i++) {
moel@109
    71
        s.Append(SEPARATOR);
moel@109
    72
        s.Append(extensions[i]);
moel@109
    73
      }
moel@109
    74
      this.identifier = s.ToString();
moel@109
    75
    }
moel@109
    76
moel@109
    77
    public override string ToString() {
moel@109
    78
      return identifier;
moel@109
    79
    }
moel@109
    80
moel@109
    81
    public override bool Equals(System.Object obj) {
moel@109
    82
      if (obj == null)
moel@109
    83
        return false;
moel@109
    84
moel@109
    85
      Identifier id = obj as Identifier;
moel@109
    86
      if (id == null)
moel@109
    87
        return false;
moel@109
    88
moel@109
    89
      return (identifier == id.identifier);
moel@109
    90
    }
moel@109
    91
moel@109
    92
    public override int GetHashCode() {
moel@109
    93
      return identifier.GetHashCode();
moel@109
    94
    }
moel@109
    95
  }
moel@109
    96
}