private static void AppendNamespaceHashCode(ref HashCodeBuilder builder, NamespaceReferenceHandle namespaceRefHandle, MetadataReader reader)
        {
            NamespaceReference namespaceReference = reader.GetNamespaceReference(namespaceRefHandle);

            Handle parentHandle = namespaceReference.ParentScopeOrNamespace;
            HandleType parentHandleType = parentHandle.HandleType;
            if (parentHandleType == HandleType.NamespaceReference)
            {
                AppendNamespaceHashCode(ref builder, parentHandle.ToNamespaceReferenceHandle(reader), reader);
                string namespaceNamePart = reader.GetString(namespaceReference.Name);
                builder.Append(namespaceNamePart);
                builder.Append(".");
            }
            else
            {
                Debug.Assert(parentHandleType == HandleType.ScopeReference);
                Debug.Assert(String.IsNullOrEmpty(reader.GetString(namespaceReference.Name)), "Root namespace with a name?");
            }
        }
        } // Read

        public static uint Read(this NativeReader reader, uint offset, out NamespaceReferenceHandle[] values)
        {
            uint count;
            offset = reader.DecodeUnsigned(offset, out count);
            if (count == 0)
            {
                values = s_emptyNamespaceReferenceHandleArray;
            }
            else
            {
                values = new NamespaceReferenceHandle[count];
                for (uint i = 0; i < count; ++i)
                {
                    NamespaceReferenceHandle tmp;
                    offset = reader.Read(offset, out tmp);
                    values[i] = tmp;
                }
            }
            return offset;
        } // Read
        } // Read

        public static uint Read(this NativeReader reader, uint offset, out NamespaceReferenceHandle handle)
        {
            uint value;
            offset = reader.DecodeUnsigned(offset, out value);
            handle = new NamespaceReferenceHandle((int)value);
            handle._Validate();
            return offset;
        } // Read
Beispiel #4
0
 internal static string GetNamespaceName(this MetadataReader metadataReader, NamespaceReferenceHandle namespaceReferenceHandle)
 {
     if (namespaceReferenceHandle.IsNull(metadataReader))
     {
         return null;
     }
     else
     {
         // TODO! Cache this result, or do something to make it more efficient.
         NamespaceReference namespaceReference = namespaceReferenceHandle.GetNamespaceReference(metadataReader);
         string name = metadataReader.GetString(namespaceReference.Name) ?? "";
         if (namespaceReference.ParentScopeOrNamespace.HandleType == HandleType.NamespaceReference)
         {
             string parentName = metadataReader.GetNamespaceName(namespaceReference.ParentScopeOrNamespace.ToNamespaceReferenceHandle(metadataReader));
             if (!string.IsNullOrEmpty(parentName))
             {
                 name = parentName + "." + name;
             }
         }
         return name;
     }
 }
        } // IsNull

        internal bool IsNull(NamespaceReferenceHandle handle)
        {
            return (handle._value & 0x00FFFFFF) == 0;
        } // IsNull
        } // ToHandle

        internal Handle ToHandle(NamespaceReferenceHandle handle)
        {
            return new Handle(handle._value);
        } // ToHandle
        } // GetNamespaceDefinition

        public NamespaceReference GetNamespaceReference(NamespaceReferenceHandle handle)
        {
            var record = new NamespaceReference() { _reader = this, _handle = handle };
            var offset = (uint)handle.Offset;
            offset = _streamReader.Read(offset, out record._parentScopeOrNamespace);
            offset = _streamReader.Read(offset, out record._name);
            return record;
        } // GetNamespaceReference
        } // Equals

        public bool Equals(NamespaceReferenceHandle handle)
        {
            return _value == handle._value;
        } // Equals
Beispiel #9
0
        } // Read

        public static uint Read(this NativeReader reader, uint offset, out NamespaceReferenceHandle[] values)
        {
            uint count;
            offset = reader.DecodeUnsigned(offset, out count);
            #if !NETFX_45
            if (count == 0)
            {
                values = Array.Empty<NamespaceReferenceHandle>();
            }
            else
            #endif
            {
                values = new NamespaceReferenceHandle[count];
                for (uint i = 0; i < count; ++i)
                {
                    NamespaceReferenceHandle tmp;
                    offset = reader.Read(offset, out tmp);
                    values[i] = tmp;
                }
            }
            return offset;
        } // Read