Ejemplo n.º 1
0
 /* ----------------------------------------------------------------- */
 ///
 /// CommonSequence
 ///
 /// <summary>
 /// オブジェクトを初期化します。
 /// </summary>
 ///
 /* ----------------------------------------------------------------- */
 public CommonSequence(int older, int newer, int count, CommonSequence <T> next)
 {
     OlderStart = older;
     NewerStart = newer;
     Count      = count;
     Next       = next;
 }
Ejemplo n.º 2
0
        /* ----------------------------------------------------------------- */
        ///
        /// Compare
        ///
        /// <summary>
        /// 差分を検出します。
        /// </summary>
        ///
        /// <remarks>
        /// このメソッド実行時には対象となるデータが設定されている
        /// 必要があります。
        /// </remarks>
        ///
        /* ----------------------------------------------------------------- */
        private IEnumerable <Result <T> > Compare(Condition mask)
        {
            Debug.Assert(_older != null && _newer != null && _older.Length <= _newer.Length);

            _fp = new Snake[_older.Length + _newer.Length + 3];

            var d = _newer.Length - _older.Length;
            var p = 0;

            do
            {
                for (var k = -p; k < d; ++k)
                {
                    SearchSnake(k);
                }
                for (var k = d + p; k >= d; --k)
                {
                    SearchSnake(k);
                }
                ++p;
            }while (_fp[_newer.Length + 1].Position != _newer.Length + 1);

            var tail = new CommonSequence <T>(_older.Length, _newer.Length, 0, _fp[_newer.Length + 1].Sequence);

            return(tail.Reverse().ToResult(_older, _newer, mask, _swap));
        }
Ejemplo n.º 3
0
        /* ----------------------------------------------------------------- */
        ///
        /// Reverse
        ///
        /// <summary>
        /// リンクリストを反転させます。
        /// </summary>
        ///
        /* ----------------------------------------------------------------- */
        public CommonSequence <T> Reverse()
        {
            CommonSequence <T> top     = null;
            CommonSequence <T> current = this;

            while (current != null)
            {
                var next = current.Next;
                current.Next = top;
                top          = current;
                current      = next;
            }
            return(top);
        }