The Labs \ Source Viewer \ SSCLI \ System.Runtime.InteropServices \ ArrayWithOffset

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. namespace System.Runtime.InteropServices
  16. {
  17.    
  18.     using System;
  19.     using System.Runtime.CompilerServices;
  20.    
  21.     [Serializable()]
  22.     [System.Runtime.InteropServices.ComVisible(true)]
  23.     public struct ArrayWithOffset
  24.     {
  25.         //private ArrayWithOffset()
  26.         //{
  27.         // throw new Exception();
  28.         //}
  29.        
  30.         public ArrayWithOffset(object array, int offset)
  31.         {
  32.             m_array = array;
  33.             m_offset = offset;
  34.             m_count = 0;
  35.             m_count = CalculateCount();
  36.         }
  37.        
  38.         public object GetArray()
  39.         {
  40.             return m_array;
  41.         }
  42.        
  43.         public int GetOffset()
  44.         {
  45.             return m_offset;
  46.         }
  47.        
  48.         public override int GetHashCode()
  49.         {
  50.             return m_count + m_offset;
  51.         }
  52.        
  53.         public override bool Equals(object obj)
  54.         {
  55.             if (obj is ArrayWithOffset)
  56.                 return Equals((ArrayWithOffset)obj);
  57.             else
  58.                 return false;
  59.         }
  60.        
  61.         public bool Equals(ArrayWithOffset obj)
  62.         {
  63.             return obj.m_array == m_array && obj.m_offset == m_offset && obj.m_count == m_count;
  64.         }
  65.        
  66.         public static bool operator ==(ArrayWithOffset a, ArrayWithOffset b)
  67.         {
  68.             return a.Equals(b);
  69.         }
  70.        
  71.         public static bool operator !=(ArrayWithOffset a, ArrayWithOffset b)
  72.         {
  73.             return !(a == b);
  74.         }
  75.        
  76.         [MethodImplAttribute(MethodImplOptions.InternalCall)]
  77.         private extern int CalculateCount();
  78.        
  79.         private object m_array;
  80.         private int m_offset;
  81.         private int m_count;
  82.     }
  83.    
  84. }

Developer Fusion