You've already forked linux-packaging-mono
Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
69
external/referencesource/System.Web/Configuration/RuleInfoComparer.cs
vendored
Normal file
69
external/referencesource/System.Web/Configuration/RuleInfoComparer.cs
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="RuleInfoComparer.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Web.Configuration
|
||||
{
|
||||
using System;
|
||||
using System.Xml;
|
||||
using System.Configuration;
|
||||
using System.Collections.Specialized;
|
||||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.ComponentModel;
|
||||
using System.Web.Hosting;
|
||||
using System.Web.Util;
|
||||
using System.Web.Configuration;
|
||||
using System.Web.Management;
|
||||
using System.Web.Compilation;
|
||||
|
||||
//
|
||||
// This class is used to compare two RuleInfo object. Basically, the array list
|
||||
// will be sorted based on class hierachical order. The smaller the value, the
|
||||
// more nearer the class is to the root (WebBaseEvent), in a class inheritance sense.
|
||||
//
|
||||
// On the other hand, if x > y, it means x is NOT a parent class of y.
|
||||
//
|
||||
// The array is sorted in this way so that if we want to find out the config setting of
|
||||
// an event class x, we start searching in a decreasing order, and the first entry (E)
|
||||
// that satifies the test: if (x is E), then we find the right settings for x.
|
||||
//
|
||||
// BTW, this is just a trick to save me from writing too much code. A n-node tree
|
||||
// method is faster, but I was too lazy.
|
||||
//
|
||||
internal class RuleInfoComparer : IComparer{
|
||||
public int Compare(object x, object y) {
|
||||
int res;
|
||||
|
||||
Type xType =
|
||||
((HealthMonitoringSectionHelper.RuleInfo)x)._eventMappingSettings.RealType;
|
||||
Type yType =
|
||||
((HealthMonitoringSectionHelper.RuleInfo)y)._eventMappingSettings.RealType;
|
||||
|
||||
if (xType.Equals(yType)) {
|
||||
res = 0;
|
||||
}
|
||||
else if (xType.IsSubclassOf(yType)) {
|
||||
res = 1;
|
||||
}
|
||||
else if (yType.IsSubclassOf(xType)) {
|
||||
res = -1;
|
||||
}
|
||||
else {
|
||||
// If they're unrelated, we can't return 0 because it
|
||||
// will confuse the sorting method.
|
||||
// We can return 1 or -1, but it must be consistent.
|
||||
return String.Compare(xType.ToString(), yType.ToString(), StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
Debug.Trace("RuleInfoComparer", "xType=" + xType.ToString() +
|
||||
"; yType=" + yType.ToString() + "; res=" + res);
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user