예제 #1
0
 /// <summary>Cleans the intermediates so the garbage collector can get them.</summary>
 private void CleanIntermediates()
 {
     _ddlList    = null;
     _items      = null;
     _lastLcp    = null;
     _pqls       = null;
     _preResults = null;
 }
		private void InitializeIntermediates()
		{
			// initialize items
			list_sizes = new int[_numberOfWords];
			int totalItems = 0;
			for (int i = 0; i < list_sizes.Length; ++i)
			{
				list_sizes[i] = (_x_repeats[i] > 0) ? _x_repeats[i] : 1;
				totalItems += list_sizes[i];
			}

			_items = new int[_numberOfWords][];
			_preResults = new List<PreResult>();
			_ddlList = new LinkedObjectList();
			_ddlList.Init(totalItems);
			var L = _ddlList.L;
			int ddlListPtr = 0;
			for (int i = 0; i < _items.Length; ++i)
			{
				int list_size_i = list_sizes[i];
				_items[i] = new int[list_size_i];
				for (int j = 0; j < list_size_i; ++j)
				{
					L[ddlListPtr].Init(ddlListPtr, i);
					_items[i][j] = ddlListPtr;
					++ddlListPtr;
				}
				if (_x_repeats[i] > 0)
					L[_items[i][0]].IntervalSize = 1;
			}

			// initialize intermediates
			_last_index = new int[_numberOfWords];
			_pqls = new MinimumOnSlidingWindow[_numberOfWords];
			for (int i = 0; i < _numberOfWords; ++i)
			{
				_pqls[i].Initialize(_x_repeats[i], 0);
				//_pqls[i].add_value(0);
			}

			_lastLcp = new int[_maximumLcp + 1];

			var begin = L[_ddlList.Last].Previous; // front.prev->prev;
			var end = _ddlList.First; // originally back.next
			L[begin].IntervalEnd = end;
			L[end].IntervalBegin = begin;
			if (_x_repeats[L[_ddlList.Last].Text] > 1)
			{
				L[end].IntervalSize = _numberOfWords;
			}
			else
			{
				L[end].IntervalSize = _numberOfWords - 1;
			}
			for (int i = 0; i < _numberOfWords - 1; ++i)
			{
				if (_x_repeats[i] == 0)
				{
					L[end].IntervalSize = -1;
					L[end].Clean = false;
				}
			}
			_lastLcp[0] = end;
		}
예제 #3
0
        private void InitializeIntermediates()
        {
            // initialize items
            list_sizes = new int[_numberOfWords];
            for (int i = 0; i < list_sizes.Length; ++i)
            {
                list_sizes[i] = (_x_repeats[i] > 0) ? _x_repeats[i] : 1;
            }

            _preResults = new List <PreResult>();
            _ddlList    = new LinkedObjectList();
            _items      = new DDLElement[_numberOfWords][];
            for (int i = 0; i < _items.Length; ++i)
            {
                int list_size_i = list_sizes[i];
                _items[i] = new DDLElement[list_size_i];
                for (int j = 0; j < list_size_i; ++j)
                {
                    DDLElement ele;
                    _items[i][j] = ele = new DDLElement()
                    {
                        Text = i
                    };
                    ele.IntervalSize = 0;
                    _ddlList.AddLast(ele);
                }
                if (_x_repeats[i] > 0)
                {
                    _items[i][0].IntervalSize = 1;
                }
            }

            // initialize intermediates
            _last_index = new int[_numberOfWords];
            _pqls       = new MinimumOnSlidingWindow[_numberOfWords];
            for (int i = 0; i < _numberOfWords; ++i)
            {
                _pqls[i].Initialize(_x_repeats[i], 0);
                //_pqls[i].add_value(0);
            }

            _lastLcp = new DDLElement[_maximumLcp + 1];

            var        begin = _ddlList.Last.Previous; // front.prev->prev;
            DDLElement end   = _ddlList.First;         // originally back.next

            begin.IntervalEnd = end;
            end.IntervalBegin = begin;
            if (_x_repeats[_ddlList.Last.Text] > 1)
            {
                end.IntervalSize = _numberOfWords;
            }
            else
            {
                end.IntervalSize = _numberOfWords - 1;
            }
            for (int i = 0; i < _numberOfWords - 1; ++i)
            {
                if (_x_repeats[i] == 0)
                {
                    end.IntervalSize = -1;
                    end.Clean        = false;
                }
            }
            _lastLcp[0] = end;
        }
예제 #4
0
        private void InitializeIntermediates()
        {
            // initialize items
            list_sizes = new int[_numberOfWords];
            int totalItems = 0;

            for (int i = 0; i < list_sizes.Length; ++i)
            {
                list_sizes[i] = (_x_repeats[i] > 0) ? _x_repeats[i] : 1;
                totalItems   += list_sizes[i];
            }

            _items      = new int[_numberOfWords][];
            _preResults = new List <PreResult>();
            _ddlList    = new LinkedObjectList();
            _ddlList.Init(totalItems);
            var L          = _ddlList.L;
            int ddlListPtr = 0;

            for (int i = 0; i < _items.Length; ++i)
            {
                int list_size_i = list_sizes[i];
                _items[i] = new int[list_size_i];
                for (int j = 0; j < list_size_i; ++j)
                {
                    L[ddlListPtr].Init(ddlListPtr, i);
                    _items[i][j] = ddlListPtr;
                    ++ddlListPtr;
                }
                if (_x_repeats[i] > 0)
                {
                    L[_items[i][0]].IntervalSize = 1;
                }
            }

            // initialize intermediates
            _last_index = new int[_numberOfWords];
            _pqls       = new MinimumOnSlidingWindow[_numberOfWords];
            for (int i = 0; i < _numberOfWords; ++i)
            {
                _pqls[i].Initialize(_x_repeats[i], 0);
                //_pqls[i].add_value(0);
            }

            _lastLcp = new int[_maximumLcp + 1];

            var begin = L[_ddlList.Last].Previous; // front.prev->prev;
            var end   = _ddlList.First;            // originally back.next

            L[begin].IntervalEnd = end;
            L[end].IntervalBegin = begin;
            if (_x_repeats[L[_ddlList.Last].Text] > 1)
            {
                L[end].IntervalSize = _numberOfWords;
            }
            else
            {
                L[end].IntervalSize = _numberOfWords - 1;
            }
            for (int i = 0; i < _numberOfWords - 1; ++i)
            {
                if (_x_repeats[i] == 0)
                {
                    L[end].IntervalSize = -1;
                    L[end].Clean        = false;
                }
            }
            _lastLcp[0] = end;
        }