private static long HashModuleFileSizes(IImportChildrenSource source)
        {
            var hash  = 0L;
            var names = source.GetChildrenNames();

            foreach (var name in names)
            {
                if (source.TryGetChildImport(name, out var child))
                {
                    if (child is ModuleImport moduleImport)
                    {
                        if (moduleImport.ModuleFileSize == 0)
                        {
                            continue; // Typically test case, memory-only module.
                        }
                        hash = unchecked (hash * 31 ^ moduleImport.ModuleFileSize);
                    }

                    if (child is IImportChildrenSource childSource)
                    {
                        hash = unchecked (hash * 31 ^ HashModuleFileSizes(childSource));
                    }
                }
            }

            return(hash);
        }
예제 #2
0
        private static long HashModuleFileSizes(IImportChildrenSource source)
        {
            var hash  = 0L;
            var names = source.GetChildrenNames();

            foreach (var name in names)
            {
                if (source.TryGetChildImport(name, out var child))
                {
                    if (child is ModuleImport moduleImport)
                    {
                        hash = unchecked (hash * 31 ^ moduleImport.ModuleFileSize);
                    }

                    if (child is IImportChildrenSource childSource)
                    {
                        hash = unchecked (hash * 31 ^ HashModuleFileSizes(childSource));
                    }
                }
            }

            return(hash);
        }
예제 #3
0
 public ImmutableArray <string> GetChildrenNames() => _childrenSource.GetChildrenNames();