LibiadaCore.Core.Chain.CongenericChain C# (CSharp) Method

CongenericChain() public method

Returns clone of congeneric sequence of given element. If there is no such element in chain returns null.
public CongenericChain ( IBaseObject baseObject ) : CongenericChain
baseObject IBaseObject /// Element of congeneric chain. ///
return CongenericChain
        public CongenericChain CongenericChain(IBaseObject baseObject)
        {
            if (congenericChains == null)
            {
                FillCongenericChains();
            }

            CongenericChain result = null;

            int pos = Alphabet.IndexOf(baseObject);
            if (pos != -1)
            {
                result = (CongenericChain)congenericChains[pos].Clone();
            }

            return result;
        }

Same methods

Chain::CongenericChain ( int index ) : CongenericChain

Usage Example

        /// <summary>
        /// The create.
        /// </summary>
        /// <param name="source">
        /// The source.
        /// </param>
        /// <param name="link">
        /// The link.
        /// </param>
        /// <returns>
        /// The <see cref="Chain"/>.
        /// </returns>
        /// <exception cref="ArgumentException">
        /// Thrown if link is unacceptable.
        /// </exception>
        public static Chain Create(Chain source, Link link)
        {
            if (link != Link.Start && link != Link.End && link != Link.CycleEnd && link != Link.CycleStart)
            {
                throw new ArgumentException("Unknown link", "link");
            }

            var result = new Chain(source.GetLength());
            Alphabet sourceAlphabet = source.Alphabet;
            var entries = new int[sourceAlphabet.Cardinality];

            var intervals = new int[sourceAlphabet.Cardinality][];

            for (int j = 0; j < sourceAlphabet.Cardinality; j++)
            {
                var intervalsManager = new CongenericIntervalsManager(source.CongenericChain(j));
                intervals[j] = intervalsManager.GetIntervals(link);
            }

            for (int i = 0; i < source.GetLength(); i++)
            {
                var elementIndex = sourceAlphabet.IndexOf(source[i]);
                int entry = entries[elementIndex]++;
                var interval = intervals[elementIndex][entry];
                result.Set(new ValueInt(interval), i);
            }

            return result;
        }
All Usage Examples Of LibiadaCore.Core.Chain::CongenericChain