Esempio n. 1
0
        private async void CheckBox_Unchecked(object sender, RoutedEventArgs e)
        {
            Collapse.Begin();
            await gridEdgeBlur.Fade(value : 0f, duration : 100, delay : 0).StartAsync();

            gridEdgeBlur.Visibility = Visibility.Collapsed;
        }
Esempio n. 2
0
        protected virtual void CollapseClassificationTypes()
        {
            Classification c = new Classification(dataSet, visibleTables);
            c.CalculateHierarquies();
            List<List<string>> maximal = c.MaximalStringHierarchies;

            foreach (List<string> hierarchy in maximal)
            {
                foreach (string table in hierarchy)
                {
                    string newTable = table;

                    if (table.IndexOf("(") != -1)
                        newTable = table.Substring(0, table.IndexOf("("));

                    if (entityTypes[newTable] > EntityTypes.ClassificationEntity)
                        continue;

                    if (dataSet.Tables.Contains(newTable))
                    {
                        Collapse cp = new Collapse(dataSet, newTable, new List<string>(), VisibleTables);
                        dataSet = cp.GetResult();
                    }
                }
            }
        }
        public override DataSet DeriveModel()
        {
            Classification c = new Classification(dataSet, visibleTables);
            c.CalculateHierarquies();
            List<List<string>> maximal = c.MaximalStringHierarchies;

            foreach (List<string> hierarchy in maximal)
            {
                foreach (string table in hierarchy)
                {
                    string newTable = table;

                    if (table.IndexOf("(") != -1)
                        newTable = table.Substring(0, table.IndexOf("("));

                    if (entityTypes[newTable] == EntityTypes.TransactionEntity)
                        continue;

                    if (dataSet.Tables.Contains(newTable))
                    {
                        Collapse cp = new Collapse(dataSet, newTable, new List<string>(), visibleTables);
                        dataSet = cp.GetResult();
                        visibleTables = cp.VisibleTables;
                    }
                }
            }

            return dataSet;
        }
Esempio n. 4
0
        public virtual void SaveToXML(XmlElement objOrbit)
        {
            var nfi = System.Globalization.NumberFormatInfo.InvariantInfo;

            var xePlanet = objOrbit.OwnerDocument.CreateElement("Planet");

            objOrbit.AppendChild(xePlanet);
            Common.CreateTextNode(xePlanet, "Type", PlanetType.ToString());
            Common.CreateTextNode(xePlanet, "Dense", Dense.ToString());
            Common.CreateTextNode(xePlanet, "Mass", Mass.ToString());
            Common.CreateTextNode(xePlanet, "Gravity", Grav.ToString());
            Common.CreateTextNode(xePlanet, "Pressure", Pressure.ToString());
            Common.CreateTextNode(xePlanet, "MaxPop", Maxpop.ToString());
            Common.CreateTextNode(xePlanet, "OrbitRange", OrbitRange.ToString());
            Common.CreateTextNode(xePlanet, "OrbitNumber", OrbitNumber.ToString());
            Common.CreateTextNode(xePlanet, "Tilt", Tilt.ToString());
            Common.CreateTextNode(xePlanet, "Ecc", Ecc.ToString());
            Common.CreateTextNode(xePlanet, "Rotation", Rotation.ToString());
            Common.CreateTextNode(xePlanet, "TidallyLocked", TidallyLocked.ToString());
            Common.CreateTextNode(xePlanet, "Temp", Temp.ToString());
            Common.CreateTextNode(xePlanet, "Diameter", Diameter.ToString());
            Common.CreateTextNode(xePlanet, "NumSats", Satellites.Count.ToString());
            Common.CreateTextNode(xePlanet, "Mainworld", MainWorld.ToString());
            Common.CreateTextNode(xePlanet, "NormalUWP", Normal.DisplayString(PlanetType, Diameter));
            Common.CreateTextNode(xePlanet, "CollapseUWP", Collapse.DisplayString(PlanetType, Diameter));
            Common.CreateTextNode(xePlanet, "Life", Life.ToString());
            Common.CreateTextNode(xePlanet, "LifeFactor", LifeFactor.ToString());
            Common.CreateTextNode(xePlanet, "Name", Name);

            var xeChild = objOrbit.OwnerDocument.CreateElement("Temperature");

            for (var i = 0; i < (Constants.NUM_HEX_ROWS * 2) - 1; i += 2)
            {
                var xeTemp = objOrbit.OwnerDocument.CreateElement("Row" + (i / 2 + 1).ToString());

                Common.CreateTextNode(xeTemp, "Summer", Summer[i].ToString("N", nfi) + "/" + Summer[i + 1].ToString("N", nfi));
                Common.CreateTextNode(xeTemp, "Fall", Fall[i].ToString("N", nfi) + "/" + Fall[i + 1].ToString("N", nfi));
                Common.CreateTextNode(xeTemp, "Winter", Winter[i].ToString("N", nfi) + "/" + Winter[i + 1].ToString("N", nfi));

                xeChild.AppendChild(xeTemp);
            }

            xePlanet.AppendChild(xeChild);

            if (Life)
            {
                xeChild = objOrbit.OwnerDocument.CreateElement("AnimalEncounters");
                TableGenerator.WriteToXML(xeChild);
                xePlanet.AppendChild(xeChild);
            }

            Normal.SaveToXML(xePlanet);
            Collapse.SaveToXML(xePlanet);

            foreach (var satellite in Satellites)
            {
                satellite.SaveToXML(xePlanet);
            }
        }
Esempio n. 5
0
        private string GetOptionalParameters()
        {
            bool HasOneOptionalParam = false;

            string OptionalParams = "";

            if (Limit != null)
            {
                OptionalParams += "limit=" + Limit.ToString();

                HasOneOptionalParam = true;
            }

            if (ColumnIndex != null)
            {
                OptionalParams += ((HasOneOptionalParam) ? "&" : "") + "column_index=" + ColumnIndex.ToString();

                HasOneOptionalParam = true;
            }

            if (StartDate != null)
            {
                OptionalParams += ((HasOneOptionalParam) ? "&" : "") + "start_date=" + StartDate.ToString();

                HasOneOptionalParam = true;
            }

            if (EndDate != null)
            {
                OptionalParams += ((HasOneOptionalParam) ? "&" : "") + "end_date=" + EndDate.ToString();

                HasOneOptionalParam = true;
            }

            if (Order == eTimeSeriesOrder.Asc)
            {
                OptionalParams += ((HasOneOptionalParam) ? "&" : "") + "order=" + Order.ToString();

                HasOneOptionalParam = true;
            }

            if (Collapse != eTimeSeriesCollapse.None)
            {
                OptionalParams += ((HasOneOptionalParam) ? "&" : "") + "collapse=" + Collapse.ToString();

                HasOneOptionalParam = true;
            }

            if (Transform != eTimeSeriesTransform.None)
            {
                OptionalParams += ((HasOneOptionalParam) ? "&" : "") + "transform=" + Transform.ToString();

                HasOneOptionalParam = true;
            }


            return((HasOneOptionalParam) ? ("?" + OptionalParams) : "");
        }
Esempio n. 6
0
        public virtual void onCollapse(object sender, EventArgs e)
        {
            if (_contentContainer != null)
            {
                _contentContainer.Visible = false;
            }

            Collapse.Raise(this, e);
        }
Esempio n. 7
0
        public void CollapseRootButton()
        {
            if (innerRingExpanded)
            {
                // set flag
                innerRingExpanded = false;

                // expand button
                Collapse.Begin();
            }
        }
 async System.Threading.Tasks.Task CollapseAll(RadzenAccordionItem item)
 {
     if (!Multiple && items.Count > 1)
     {
         foreach (var i in items.Where(i => i != item))
         {
             var itemIndex = items.IndexOf(i);
             if (expandedIdexes.Contains(itemIndex))
             {
                 expandedIdexes.Remove(itemIndex);
                 await Collapse.InvokeAsync(items.IndexOf(i));
             }
         }
     }
 }
Esempio n. 9
0
        public override DataSet DeriveModel()
        {
            Classification c = new Classification(dataSet, visibleTables);
            c.CalculateHierarquies();
            List<string> minimal = c.MinimalStringEntities;

            foreach (string table in minimal)
            {
                Collapse cp = new Collapse(dataSet, table, new List<string>(), VisibleTables);
                dataSet = cp.GetResult();
                visibleTables = cp.VisibleTables;
            }

            return dataSet;
        }
    public MySpecialStringComparerDecorator(StringComparer comparer, Collapse equivalencyRule)
    {
        if (comparer == null)
        {
            throw new ArgumentNullException("comparer");
        }
        if (!Enum.IsDefined(typeof(Collapse), equivalencyRule))
        {
            throw new ArgumentOutOfRangeException("equivalencyRule");
        }

        this.instance = comparer;
        this.rule     = equivalencyRule;

        return;
    }
Esempio n. 11
0
        public double Population(bool forCollapse)
        {
            var pop = 0.0;

            foreach (var satellite in Satellites)
            {
                pop += satellite.Population(forCollapse);
            }
            if (forCollapse)
            {
                pop += Collapse.Population();
            }
            else
            {
                pop += Normal.Population();
            }
            return(pop);
        }
        /// <summary>
        /// Returns the hash code for the object.
        /// </summary>
        /// <returns>The hash code for the object.</returns>
        public override int GetHashCode()
        {
            int hashCode = 1912135539;

            hashCode = hashCode * -1521134295 + base.GetHashCode();
            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Region);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(StartString);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(EndString);

            hashCode = hashCode * -1521134295 + Dedent.GetHashCode();
            hashCode = hashCode * -1521134295 + Indent.GetHashCode();
            hashCode = hashCode * -1521134295 + Collapse.GetHashCode();
            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Before);

            return(hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(After));
        }
        protected override void CollapseClassificationTypes()
        {
            Classification c = new Classification(dataSet, visibleTables);
            c.CalculateHierarquies();
            List<List<string>> maximal = c.MaximalStringHierarchies;

            foreach (List<string> hierarchy in maximal)
            {
                foreach (string table in hierarchy)
                {
                    string newTable = table;

                    if (table.IndexOf("(") != -1)
                        newTable = table.Substring(0, table.IndexOf("("));

                    bool doNotCollapse = false;
                    if (entityTypes[newTable].Equals(EntityTypes.ClassificationEntity))
                    {
                        List<DataRelation> relations = DataHelper.GetRelations(dataSet, newTable);

                        if (relations.Count > 1)
                        {
                            foreach (DataRelation dr in relations)
                            {
                                if (entityTypes[dr.ChildTable.TableName].Equals(EntityTypes.ComponentEntity))
                                    doNotCollapse = true;
                            }
                        }
                    }

                    if (doNotCollapse)
                        continue;

                    if (entityTypes[newTable] > EntityTypes.ClassificationEntity)
                        continue;

                    if (dataSet.Tables.Contains(newTable))
                    {
                        Collapse cp = new Collapse(dataSet, newTable, new List<string>(), VisibleTables);
                        dataSet = cp.GetResult();
                    }
                }
            }
        }
        internal async Task ExpandExec(MouseEventArgs args, int paneIndex, string paneId)
        {
            var pane     = Panes[paneIndex];
            var paneNext = pane.Next();

            if (paneNext != null && paneNext.Collapsible && paneNext.IsLast && !pane.Collapsed)
            {
                if (Collapse.HasDelegate)
                {
                    var arg = new RadzenSplitterEventArgs {
                        PaneIndex = paneNext.Index, Pane = paneNext
                    };
                    await Collapse.InvokeAsync(arg);

                    if (arg.Cancel)
                    {
                        return;
                    }
                }

                paneNext.Collapsed = true;
            }
            else
            {
                if (Expand.HasDelegate)
                {
                    var arg = new RadzenSplitterEventArgs {
                        PaneIndex = pane.Index, Pane = pane
                    };
                    await Expand.InvokeAsync(arg);

                    if (arg.Cancel)
                    {
                        return;
                    }
                }

                pane.Collapsed = false;
            }

            await InvokeAsync(StateHasChanged);
        }
Esempio n. 15
0
        public GhostMovement(Cell[,] myMaze, Pacman pacman, int thickness, int imageSize, string Path, Random rand, DispatcherTimer timer, DispatcherTimer pacmanTimer)
        {
            this.pacmanTimer     = pacmanTimer;
            this.thickness       = thickness;
            this.imageSize       = imageSize;
            converter            = new CoordinatesConverter(thickness, imageSize);
            ghost                = new Ghost(myMaze, pacman.currentPosition, rand);
            collapse             = new Collapse(pacman, ghost);                          //екземпляр класу зіткнення, який приймає вхідними параметрами привида та пакмена
            currentGhostPosition = converter.ToCanvasCoordinates(ghost.currentPosition); //поточне розташування
            BitmapImage pacmanBitmap = new System.Windows.Media.Imaging.BitmapImage(new Uri(Path, UriKind.Relative));

            ghostImage        = new Image();
            ghostImage.Source = pacmanBitmap;
            Canvas.SetLeft(ghostImage, currentGhostPosition.X);
            Canvas.SetTop(ghostImage, currentGhostPosition.Y);
            ((MainWindow)System.Windows.Application.Current.MainWindow).canvas.Children.Add(ghostImage);
            this.timer     = timer;
            timer.Interval = TimeSpan.FromSeconds((imageSize + 2 * thickness) / 100.0);
            timer.Tick    += Timer_Tick;;
            timer.Start();
        }
Esempio n. 16
0
        public override XElement ToXElement()
        {
            var el = base.ToXElement();

            if (Collapse != null)
            {
                el.Add(new XAttribute(CollapseAttr, Collapse.ToString().ToUpper()));
            }
            if (Limit != null)
            {
                el.Add(new XAttribute(GroupLimitAttr, Limit));
            }
            if (FieldRefs != null)
            {
                foreach (var fieldRef in FieldRefs.Where(fieldRef => fieldRef != null))
                {
                    el.Add(fieldRef.ToXElement());
                }
            }
            return(el);
        }
Esempio n. 17
0
        public void CollapseAll()
        {
            // collapse outer ring
            if (outerRingExpanded)
            {
                // set flag
                outerRingExpanded = false;

                // start animation
                CollapseOuter.Begin();
            }

            // collapse root button
            if (innerRingExpanded)
            {
                // set flag
                innerRingExpanded = false;

                // start animation
                Collapse.Begin();
            }
        }
Esempio n. 18
0
        public static string GetCollapse(Collapse collapse)
        {
            switch (collapse)
            {
            case Collapse.Daily:
                return("daily");

            case Collapse.Weekly:
                return("weekly");

            case Collapse.Monthly:
                return("monthly");

            case Collapse.Quarterly:
                return("quarterly");

            case Collapse.Annual:
                return("annual");

            default:
                return("none");
            }
        }
        internal async System.Threading.Tasks.Task SelectItem(RadzenAccordionItem item)
        {
            await CollapseAll(item);

            var itemIndex = items.IndexOf(item);

            if (!expandedIdexes.Contains(itemIndex))
            {
                expandedIdexes.Add(itemIndex);
                await Expand.InvokeAsync(itemIndex);
            }
            else
            {
                expandedIdexes.Remove(itemIndex);
                await Collapse.InvokeAsync(itemIndex);
            }

            if (!Multiple)
            {
                SelectedIndex = itemIndex;
            }

            StateHasChanged();
        }
Esempio n. 20
0
        /// <summary>
        /// This version of Collapse is used for main worlds and simple
        /// generation. There's another version used when walking an
        /// entire system.
        /// </summary>
        public void DoCollapse()
        {
            var dieroll = 0;

            // Tech level decline (or for low tech worlds possibly increase!)
            if (Normal.TechLevel.Value <= 8)
            {
                dieroll = Common.d6() - 3;
            }
            else if (Normal.TechLevel.Value >= 9 && Normal.TechLevel.Value <= 10)
            {
                dieroll = Common.d6();
            }
            else if (Normal.TechLevel.Value >= 11 && Normal.TechLevel.Value <= 13)
            {
                dieroll = Common.d6() + Common.d6();
            }
            else
            {
                dieroll = Common.d6() + Common.d6() + Common.d6();
            }
            Collapse.TechLevel.Value = Normal.TechLevel.Value - dieroll;
            var techLevelFall = Normal.TechLevel.Value - Collapse.TechLevel.Value;

            if (Normal.Pop.Value > Maxpop)
            {
                Collapse.Pop.Value = Maxpop;
            }
            else
            {
                Collapse.Pop.Value = Normal.Pop.Value;
            }

            if (Collapse.Pop.Value == 0)
            {
                // Everybody died!
                Collapse.Starport         = 'X';
                Collapse.Government.Value = 0;
                Collapse.Law.Value        = 0;
                Collapse.TechLevel.Value  = 0;
                Collapse.PopMult          = 0;
            }
            else
            {
                Collapse.PopMult = Normal.PopMult - (techLevelFall / 4);
                if (Collapse.PopMult < 0)
                {
                    Collapse.Pop.Value -= 1;
                    Collapse.PopMult   += 9;
                }
                if (Collapse.Pop.Value <= 5)
                {
                    Collapse.TechLevel.Value -= 1;
                    Collapse.PopMult         /= 2;
                    if (Collapse.PopMult < 1)
                    {
                        Collapse.Pop.Value -= 1;
                        Collapse.PopMult    = 5;
                    }
                }

                // What happended to the Starport
                dieroll = Common.d6();
                if (dieroll > techLevelFall)
                {
                    Collapse.ReduceStarport(1);
                    // Did any bases survive
                    if (Normal.Bases.Contains(Languages.Base_Naval))
                    {
                        dieroll = Common.d10();
                        if (dieroll > 8)
                        {
                            Collapse.Bases += Languages.Base_Naval;
                        }
                    }
                    if (Normal.Bases.Contains(Languages.Base_Scout))
                    {
                        dieroll = Common.d10();
                        if (dieroll > 7)
                        {
                            Collapse.Bases += Languages.Base_Scout;
                        }
                    }
                    if (Normal.Bases.Contains(Languages.Base_Military))
                    {
                        dieroll = Common.d10();
                        if (dieroll > 8)
                        {
                            Collapse.Bases += Languages.Base_Military;
                        }
                    }
                }
                else if (dieroll == techLevelFall)
                {
                    Collapse.ReduceStarport(2);
                    Collapse.Bases = string.Empty;
                }
                else
                {
                    Collapse.Starport = 'X';
                    Collapse.Bases    = string.Empty;
                }

                var balk = Collapse.Size.Value + Collapse.Pop.Value - Collapse.TechLevel.Value;

                dieroll = Common.d6() + Common.d6();
                if (dieroll <= balk)
                {
                    Collapse.Remarks += "Balkanised";
                }

                if (Collapse.Pop.Value > 4)
                {
                    dieroll = Common.d10();
                    if (dieroll < techLevelFall)
                    {
                        Collapse.Government.Value = 6;
                    }
                    else
                    {
                        Collapse.Government.Value = Common.d6() + Common.d6() - 7 + Collapse.Pop.Value;
                    }
                    Collapse.Law.Value = Common.d6() + Common.d6() - 7 + Collapse.Government.Value;
                }
                else
                {
                    Collapse.Law.Value = Common.d6() + Common.d6() - 7 + Collapse.Government.Value;
                }

                if (Collapse.Government.Value == 6)
                {
                    Collapse.Law.Value += 4;
                }

                // Population recovery
                Collapse.PopMult *= 2;
                if (Collapse.PopMult > 9)
                {
                    Collapse.Pop.Value += 1;
                    Collapse.PopMult   -= 10;
                }

                Collapse.Factions = Faction.GenerateFactions(Collapse, _configuration);

                Collapse.DoTradeClassification();
            }
        }
Esempio n. 21
0
        private void collapseToolStripMenuItem_Click(object sender, System.EventArgs e)
        {
            Elements elms = model1.SelectedElements(typeof(Table));

            foreach (string el in elms.Keys)
            {
                Shape table = (Shape) elms[el];
                SelectCollapse sc = new SelectCollapse(dataSet, table.Key, visibleTables);
                DialogResult result = DialogResult.OK;

                if (sc.RelationCount > 1)
                    result = sc.ShowDialog();

                if (result == DialogResult.OK)
                {
                    Collapse c = new Collapse(dataSet, table.Key, sc.SelectedRelations, visibleTables);
                    LoadDataSet(c.GetResult());
                }
            }
        }
Esempio n. 22
0
        /// <summary>
        /// This version of DoCollapse is used when generating a complete system
        /// </summary>
        /// <param name="main"></param>
        public void DoCollapse(Planet main)
        {
            if (!MainWorld && PlanetType != WorldType.SGG && PlanetType != WorldType.LGG && PlanetType != WorldType.STAR)
            {
                var dieroll = 0;

                // Tech level decline (or for low tech worlds possibly increase!)
                if (Normal.TechLevel.Value <= 8)
                {
                    dieroll = Common.d6() - 3;
                }
                else if (Normal.TechLevel.Value >= 9 && Normal.TechLevel.Value <= 10)
                {
                    dieroll = Common.d6();
                }
                else if (Normal.TechLevel.Value >= 11 && Normal.TechLevel.Value <= 13)
                {
                    dieroll = Common.d6() + Common.d6();
                }
                else
                {
                    dieroll = Common.d6() + Common.d6() + Common.d6();
                }
                Collapse.TechLevel.Value = Normal.TechLevel.Value - dieroll;
                var techLevelFall = Normal.TechLevel.Value - Collapse.TechLevel.Value;

                if (Normal.Pop.Value > Maxpop)
                {
                    Collapse.Pop.Value = Maxpop;
                }
                else
                {
                    Collapse.Pop.Value = Normal.Pop.Value;
                }

                if (Collapse.Pop.Value == 0)
                {
                    // Everybody died!
                    Collapse.Starport         = 'Y';
                    Collapse.Government.Value = 0;
                    Collapse.Law.Value        = 0;
                    Collapse.TechLevel.Value  = 0;
                    Collapse.PopMult          = 0;
                }
                else
                {
                    Collapse.PopMult = Normal.PopMult - (techLevelFall / 4);
                    if (Collapse.PopMult < 0)
                    {
                        Collapse.Pop.Value -= 1;
                        Collapse.PopMult   += 9;
                    }
                    if (Collapse.Pop.Value <= 5)
                    {
                        Collapse.TechLevel.Value -= 1;
                        Collapse.PopMult         /= 2;
                        if (Collapse.PopMult < 1)
                        {
                            Collapse.Pop.Value -= 1;
                            Collapse.PopMult    = 5;
                        }
                    }

                    dieroll = Common.d6();
                    if (dieroll > techLevelFall)
                    {
                        Collapse.ReduceStarport(1);
                    }
                    else if (dieroll == techLevelFall)
                    {
                        Collapse.ReduceStarport(2);
                        Collapse.Bases = string.Empty;
                    }
                    else
                    {
                        Collapse.Starport = 'Y';
                        Collapse.Bases    = string.Empty;
                    }

                    var balk = Collapse.Size.Value + Collapse.Pop.Value - Collapse.TechLevel.Value;

                    dieroll = Common.d6() + Common.d6();
                    if (dieroll <= balk)
                    {
                        Collapse.Remarks += "Balk";
                    }

                    if (Collapse.Pop.Value > 4)
                    {
                        dieroll = Common.d10();
                        if (dieroll < techLevelFall)
                        {
                            Collapse.Government.Value = 6;
                        }
                        else
                        {
                            Collapse.Government.Value = Common.d6() + Common.d6() - 7 + Collapse.Pop.Value;
                        }
                    }
                    else
                    {
                        Collapse.Government.Value = Common.d6() + Common.d6() - 7 + Collapse.Pop.Value;
                    }
                    Collapse.Law.Value = Common.d6() + Common.d6() - 7 + Collapse.Government.Value;
                    if (Collapse.Government.Value == 6)
                    {
                        Collapse.Law.Value += 4;
                    }
                    // Population recovery
                    Collapse.PopMult *= 2;
                    if (Collapse.PopMult > 9)
                    {
                        Collapse.Pop.Value += 1;
                        Collapse.PopMult   -= 10;
                    }
                    Collapse.DoSubordinate(main.Collapse);
                }
            }
            foreach (var satellite in Satellites)
            {
                satellite.DoCollapse(main);
            }
        }
Esempio n. 23
0
 private void OnCollapse(object sender, EventArgs e)
 {
     Collapse?.Invoke(sender, e);
 }
        public bool OnMenuItemActionCollapse(IMenuItem item)
        {
            Collapse?.Invoke(this, EventArgs.Empty);

            return(true);
        }
Esempio n. 25
0
    public StringComparer Decorate(StringComparer sc, Collapse equivalencyRule)
    {
        StringComparer instance = new MySpecialStringComparer(sc, equivalencyRule);

        return(instance);
    }