void scanStr(string str, byte firstFinger, out TCharFingers res) { bool sameFinger = false; byte finger = 0; res = new TCharFingers(); bool oldWasDelim; foreach (char ch in str) { oldWasDelim = false; if (finger > 4) { finger = 1; } if (ch == '|') { oldWasDelim = true; sameFinger = !sameFinger; if ((!sameFinger) && (oldWasDelim)) { finger++; //|||||A| } } else { res.Enqueue(new TCharFinger(ch, (byte)(finger + firstFinger))); if (!sameFinger) { finger++; } } } }
public TTskRandom(TTskFreqList _parentCharFreqList, int _tskNo, string right, string left, bool _isAlone, Color _col, int _minLen, int _maxLen) : base(_parentCharFreqList, _tskNo) //maxLen==0 - spetial chars { TCharFingers leftData, rightData, tempData; scanStr(left, 0, out leftData); scanStr(right, 5, out rightData); fingerNums = new Byte[leftData.Count + rightData.Count]; if (leftData.Count > rightData.Count) { tempData = rightData; rightData = leftData; leftData = tempData; } string allChars = ""; TCharFingers pairs = new TCharFingers(); foreach (TCharFinger pair in rightData) { pairs.Clear(); pairs.Enqueue(pair); if (leftData.Count > 0) { pairs.Enqueue(leftData.Dequeue()); } foreach (TCharFinger intPair in pairs) { fingerNums[allChars.Length] = intPair.Value; allChars += intPair.Key; } } chars = allChars; col = _col; isAlone = _isAlone; minLen = _minLen; maxLen = _maxLen; count = 0; }