public void Split(byte[] text, Range withinRange, RangeSet result) { if (result == null) { throw new ArgumentNullException("result"); } if (text == null) { return; } int lastGroup = withinRange.Index; int end = withinRange.Index + withinRange.Length; int i; for (i = withinRange.Index; i < end; ++i) { byte c = text[i]; if (c == UTF8.Semicolon) { result.Add(lastGroup, i - lastGroup); lastGroup = i + 1; if (lastGroup < end && text[lastGroup] == UTF8.Space) { lastGroup++; } } } // Include the last value result.Add(lastGroup, i - lastGroup); }
public void MessageTransfer(IMessage m) { _range.Clear(); _range.Add(m.Id); _session.MessageAccept(_range); _buffer.Enqueue(m); }
private double processRate(int size, string queue) { CircularBuffer <IMessage> buffer = new CircularBuffer <IMessage>(100); IMessageListener listener = new SyncListener(buffer); string localQueue = "queue-" + UUID.RandomUuid(); Session.QueueDeclare(localQueue, null, null, Option.AUTO_DELETE); Session.ExchangeBind(localQueue, "amq.direct", queue); Session.AttachMessageListener(listener, localQueue); Session.MessageSubscribe(localQueue); double rate = 0; RangeSet range = new RangeSet(); for (int i = 0; i < size; ++i) { IMessage m = buffer.Dequeue(); range.Add(m.Id); BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8); byte[] body = new byte[m.Body.Length - m.Body.Position]; reader.Read(body, 0, body.Length); rate += BitConverter.ToDouble(body, 0); } Session.MessageAccept(range); return(rate); }
public IAcceptInputTransition <string> ActivateRegexNFATransitionFromRegexCondition(RegexCondition <string> regex) { if (regex == null) { throw new ArgumentNullException(nameof(regex)); } RangeSet <string> set = new RangeSet <string>(this.rangeInfo); if (regex is RegexConst <string> regexConst) { set.Add(regexConst.ConstValue); } else if (regex is RegexRange <string> regexRange) { set.AddRange(regexRange.Minimum, regexRange.Maximum, regexRange.CanTakeMinimum, regexRange.CanTakeMaximum); } else if (regex is IRange <string> range) { set.AddRange(range.Minimum, range.Maximum, range.CanTakeMinimum, range.CanTakeMaximum); } else { throw new NotSupportedException(); } return(new RangeSetRegexFATransition <string, BasicRegexNFAState <string> >(set)); }
/// <summary> /// モーションオブジェクトの欠損/被欠損の情報をフレーム単位で取得する /// </summary> /// <param name="id">情報を取得するさきのオブジェクトのId</param> /// <returns></returns> private RangeSet <int> getExistenceList(uint id) { MotionDataSet dataSet = _dataSet; if (dataSet == null) { return(null); } RangeSet <int> ret; if (_existenceList.TryGetValue(id, out ret)) { return(ret); } try { ret = new RangeSet <int>(); int index = 0; foreach (var frame in dataSet.EnumerateFrame()) { if (frame[id] != null) { ret.Add(new RangeSet <int> .Range(index, index + 1)); } index++; } _existenceList[id] = ret; return(ret); } catch { return(null); } }
public void MessageTransfer(IMessage m) { byte[] body = new byte[m.Body.Length - m.Body.Position]; _log.Debug("Got a message of size: " + body.Length + " count = " + _count); _rs.Add(m.Id); lock (_wl) { _count--; if (_count == 0) { Monitor.PulseAll(_wl); } } }
public RangeSet ReadSequenceSet() { int count = ReadUint16() / 8; if (count == 0) { return(null); } RangeSet ranges = new RangeSet(); for (int i = 0; i < count; i++) { ranges.Add(ReadSequenceNo(), ReadSequenceNo()); } return(ranges); }
public void MessageTransfer(IMessage m) { foreach (int i in _topics) { if (_excel.TopicMessages.ContainsKey(i)) { _excel.TopicMessages[i] = m; } } // ack this message RangeSet rs = new RangeSet(); rs.Add(m.Id); _excel.Session.MessageAccept(rs); _excel.OnMessage.UpdateNotify(); }
public void MessageTransfer(IMessage request) { IMessage response = new Message(); // Get routing key for response from the request's replyTo property string routingKey; if (request.MessageProperties.HasReplyTo()) { routingKey = request.MessageProperties.GetReplyTo().GetRoutingKey(); } else { Console.WriteLine("Error: \n No routing key for request " + request); return; } BinaryReader reader = new BinaryReader(request.Body, Encoding.UTF8); byte[] body = new byte[request.Body.Length - request.Body.Position]; reader.Read(body, 0, body.Length); ASCIIEncoding enc = new ASCIIEncoding(); string message = enc.GetString(body); Console.WriteLine("Request: " + message); // Transform message content to upper case string responseBody = message.ToUpper(); // Send it back to the user response.ClearData(); response.AppendData(Encoding.UTF8.GetBytes(responseBody)); _session.MessageTransfer("amq.direct", routingKey, response); // Add this message to the list of message to be acknowledged _range.Add(request.Id); if (message.Equals("That's all, folks!")) { // Acknowledge all the received messages _session.MessageAccept(_range); lock (_session) { Monitor.Pulse(_session); } } }
public void CanAddAndFind() { var rangeSet = new RangeSet <int>(0); for (var i = 10; i <= 1000; i += 10) { rangeSet.Add(i, i); } for (var i = 0; i < 1000; i += 3) { int n; var r = rangeSet.TryFind(i, out n); Assert.That(r, Is.True); Assert.That(n, Is.EqualTo(i + 10 - i % 10.0).Or.EqualTo(i - i % 10.0)); } }
public void DebugDump() { RangeSet rangeSet = new RangeSet(); for (int i = 0; i < mSelection.Length; i++) { if (mSelection[i]) { rangeSet.Add(i); } } Debug.WriteLine("VirtualListViewSelection ranges:"); IEnumerator <RangeSet.Range> iter = rangeSet.RangeListIterator; while (iter.MoveNext()) { RangeSet.Range range = iter.Current; Debug.WriteLine(" [" + range.Low.ToString() + "," + range.High.ToString() + "]"); } }
public void MessageTransfer(IMessage m) { BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8); byte[] body = new byte[m.Body.Length - m.Body.Position]; reader.Read(body, 0, body.Length); ASCIIEncoding enc = new ASCIIEncoding(); string message = enc.GetString(body); Console.WriteLine("Message: " + message); // Add this message to the list of message to be acknowledged _range.Add(m.Id); if (message.Equals("That's all, folks!")) { // Acknowledge all the received messages _session.MessageAccept(_range); lock (_session) { Monitor.Pulse(_session); } } }
public void MessageTransfer(IMessage m) { _counter++; BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8); byte[] body = new byte[m.Body.Length - m.Body.Position]; reader.Read(body, 0, body.Length); ASCIIEncoding enc = new ASCIIEncoding(); string message = enc.GetString(body); Console.WriteLine("Response: " + message); // Add this message to the list of message to be acknowledged _range.Add(m.Id); if (_counter == 4) { Console.WriteLine("Shutting down listener for " + m.DeliveryProperties.GetRoutingKey()); // Acknowledge all the received messages _session.MessageAccept(_range); lock (_session) { Monitor.Pulse(_session); } } }
public void Operate(IList <MotionObjectInfo> selectedInfoList, IList <ProcParam <MotionProcEnv> > args, MotionDataSet dataSet, ProgressInformation progressInfo) { SingleSelectParameter mode = args[0] as SingleSelectParameter; NumberParameter limit2 = args[1] as NumberParameter; bool addMode = mode.Value == 1; int limit = (int)limit2.Value; progressInfo.Initialize(selectedInfoList.Count, "Interpolate"); foreach (var info in selectedInfoList) { // 欠落範囲の集合 RangeSet <int> missings = new RangeSet <int>(); bool exist = true; int begin = 0; // 最初のフレームからかけている部分,最後のかけている部分は無視 for (int i = 0; i < dataSet.FrameLength; i++) { if (dataSet.GetFrameByIndex(i)[info] == null) { if (exist) { begin = i; exist = false; } } else { if (!exist) { if (begin != 0) { missings.Add(new RangeSet <int> .Range(begin, i)); exist = true; } } } } // 別オブジェクトにするとき用に入力オブジェクトと出力オブジェクトを分ける MotionObjectInfo addInfo = info; if (addMode) { // 別オブジェクトにするオプション addInfo = new MotionObjectInfo(info.ObjectType, info); addInfo.Name = PathEx.GiveName("interpolate", info.Name); dataSet.AddObject(addInfo); } // 線形補間 foreach (var range in missings) { if (limit == 0 || range.End - range.Start <= limit) { int pre = range.Start - 1; int post = range.End; MotionFrame preFrame = dataSet.GetFrameByIndex(pre); MotionFrame postFrame = dataSet.GetFrameByIndex(post); MotionObject preObject = preFrame[info]; if (preObject != null) { for (int index = range.Start; index < range.End; index++) { float interpolater = (float)(index - pre) / (post - pre); MotionFrame frame = dataSet.GetFrameByIndex(index); frame[addInfo] = preObject.InterpolateLinear(postFrame[info], interpolater); } } } } progressInfo.CurrentValue++; } dataSet.DoFrameListChanged(); if (addMode) { dataSet.DoObjectInfoSetChanged(); } }
public RangeSet ReadSequenceSet() { int count = ReadUint16()/8; if (count == 0) { return null; } RangeSet ranges = new RangeSet(); for (int i = 0; i < count; i++) { ranges.Add(ReadSequenceNo(), ReadSequenceNo()); } return ranges; }
public void MessageTransfer(IMessage m) { foreach (int i in _topics) { if (_excel.TopicMessages.ContainsKey(i)) { _excel.TopicMessages[i] = m; } } // ack this message RangeSet rs = new RangeSet(); rs.Add(m.Id); _excel.Session.MessageAccept(rs); _excel.OnMessage.UpdateNotify(); }
public override void Start() { if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } CircularBuffer <IMessage> buffer = new CircularBuffer <IMessage>(100); // Create a listener and subscribe it to the queue named "message_queue" IMessageListener listener = new SyncListener(buffer); string dest = "dest" + UUID.RandomUuid(); Session.AttachMessageListener(listener, dest); Session.MessageSubscribe(_queue, dest, Options.Tx > 0 || Options.SubAck > 0 ? MessageAcceptMode.EXPLICIT : MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED, null, 0, null); // issue credits Session.MessageSetFlowMode(dest, MessageFlowMode.WINDOW); Session.MessageFlow(dest, MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES); // Notify controller we are ready. IMessage message = new Message(); message.DeliveryProperties.SetRoutingKey("sub_ready"); message.AppendData(Encoding.UTF8.GetBytes("ready")); Session.MessageTransfer("amq.direct", message); if (Options.Tx > 0) { Session.TxCommit(); Session.Sync(); } for (int j = 0; j < Options.Iterations; ++j) { //need to allocate some more credit Session.MessageFlow(dest, MessageCreditUnit.MESSAGE, (long)Options.SubQuota); RangeSet range = new RangeSet(); IMessage msg; DateTime start = DateTime.Now; for (long i = 0; i < Options.SubQuota; ++i) { msg = buffer.Dequeue(); if (Options.Tx > 0 && ((i + 1) % Options.Tx == 0)) { Session.TxCommit(); Session.Sync(); } if (Options.IntervalSub > 0) { Thread.Sleep((int)Options.IntervalSub * 1000); } range.Add(msg.Id); } if (Options.Tx > 0 || Options.SubAck > 0) { Session.MessageAccept(range); } range.Clear(); if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } DateTime end = DateTime.Now; // Report to publisher. message.DeliveryProperties.SetRoutingKey("sub_done"); message.ClearData(); message.AppendData(BitConverter.GetBytes(Options.SubQuota / end.Subtract(start).TotalMilliseconds)); Session.MessageTransfer("amq.direct", message); if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } } Session.Close(); }
public void KnownComplete(RangeSet kc) { lock (_processedLock) { RangeSet newProcessed = new RangeSet(); foreach (Range pr in _processed) { foreach (Range kr in kc) { foreach (Range r in pr.Subtract(kr)) { newProcessed.Add(r); } } } _processed = newProcessed; } }
public void Split(byte[] text, Range withinRange, RangeSet result) { if (result == null) { throw new ArgumentNullException("result"); } if (text == null) { return; } bool inGroup = false; int dottedStart = -1; int alphaStart = -1; int end = withinRange.Index + withinRange.Length; int i; for (i = withinRange.Index; i < end; ++i) { byte c = text[i]; bool isDigit = (c >= UTF8.Zero && c <= UTF8.Nine); bool isUpper = (c >= UTF8.A && c <= UTF8.Z); bool isLower = (c >= UTF8.a && c <= UTF8.z); bool isAlphaNumeric = (isDigit || isUpper || isLower); if (!inGroup) { // If we're not in a dotted group and we see an alpha character, start all machines. if (isAlphaNumeric) { inGroup = true; dottedStart = i; alphaStart = i; } } else { if (!isAlphaNumeric) { // Non-alpha - capture in progress alpha word. result.Add(alphaStart, i - alphaStart); if (c != UTF8.Period) { // We've left the group. Capture dotted group also if unique. if (alphaStart != dottedStart) { result.Add(dottedStart, i - dottedStart); } inGroup = false; } else { // Just a new dotted string part. Pre-start the next alpha word at the next character alphaStart = i + 1; } } } } // Include in progress alpha and dotted words if (inGroup) { result.Add(alphaStart, i - alphaStart); if (alphaStart != dottedStart) { result.Add(dottedStart, i - dottedStart); } } }
private double processRate(int size, string queue) { CircularBuffer<IMessage> buffer = new CircularBuffer<IMessage>(100); IMessageListener listener = new SyncListener(buffer); string localQueue = "queue-" + UUID.RandomUuid(); Session.QueueDeclare(localQueue, null, null, Option.AUTO_DELETE); Session.ExchangeBind(localQueue, "amq.direct", queue); Session.AttachMessageListener(listener, localQueue); Session.MessageSubscribe(localQueue); double rate = 0; RangeSet range = new RangeSet(); for (int i = 0; i < size; ++i) { IMessage m = buffer.Dequeue(); range.Add(m.Id); BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8); byte[] body = new byte[m.Body.Length - m.Body.Position]; reader.Read(body, 0, body.Length); rate += BitConverter.ToDouble(body,0); } Session.MessageAccept(range); return rate; }
public override void Start() { if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } CircularBuffer<IMessage> buffer = new CircularBuffer<IMessage>(100); // Create a listener and subscribe it to the queue named "message_queue" IMessageListener listener = new SyncListener(buffer); string dest = "dest" + UUID.RandomUuid(); Session.AttachMessageListener(listener, dest); Session.MessageSubscribe(_queue, dest, Options.Tx > 0 || Options.SubAck > 0 ? MessageAcceptMode.EXPLICIT : MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED, null, 0, null); // issue credits Session.MessageSetFlowMode(dest, MessageFlowMode.WINDOW); Session.MessageFlow(dest, MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES); // Notify controller we are ready. IMessage message = new Message(); message.DeliveryProperties.SetRoutingKey("sub_ready"); message.AppendData(Encoding.UTF8.GetBytes("ready")); Session.MessageTransfer("amq.direct", message); if (Options.Tx > 0) { Session.TxCommit(); Session.Sync(); } for (int j = 0; j < Options.Iterations; ++j) { //need to allocate some more credit Session.MessageFlow(dest, MessageCreditUnit.MESSAGE, (long)Options.SubQuota); RangeSet range = new RangeSet(); IMessage msg; DateTime start = DateTime.Now; for (long i = 0; i < Options.SubQuota; ++i) { msg = buffer.Dequeue(); if (Options.Tx > 0 && ((i + 1)%Options.Tx == 0)) { Session.TxCommit(); Session.Sync(); } if (Options.IntervalSub > 0) { Thread.Sleep((int) Options.IntervalSub*1000); } range.Add(msg.Id); } if (Options.Tx > 0 || Options.SubAck > 0) Session.MessageAccept(range); range.Clear(); if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } DateTime end = DateTime.Now; // Report to publisher. message.DeliveryProperties.SetRoutingKey("sub_done"); message.ClearData(); message.AppendData(BitConverter.GetBytes(Options.SubQuota / end.Subtract(start).TotalMilliseconds )); Session.MessageTransfer("amq.direct", message); if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } } Session.Close(); }
public void MessageTransfer(IMessage msg) { MSDecoder decoder = new MSDecoder() ; decoder.Init(msg.Body) ; RangeSet rangeSet = new RangeSet() ; rangeSet.Add(msg.Id) ; char opcode = 'x' ; long seq = -1 ; while (this.CheckHeader(decoder, out opcode, out seq)) { //log.Debug("Message recieved with opcode " + opcode + " and sequence " + seq) ; //log.Debug(System.Text.Encoding.UTF8.GetString(msg.Body.ToArray())) ; switch (opcode) { case 'b': consoleSession.HandleBrokerResponse(this, decoder, seq) ; break ; case 'p': consoleSession.HandlePackageIndicator(this, decoder, seq) ; break ; case 'z': consoleSession.HandleCommandComplete(this, decoder, seq) ; break ; case 'q': consoleSession.HandleClassIndicator(this, decoder, seq) ; break ; case 'm': consoleSession.HandleMethodResponse(this, decoder, seq) ; break ; case 'h': consoleSession.HandleHeartbeatIndicator(this, decoder, seq, msg) ; break ; case 'e': consoleSession.HandleEventIndicator(this, decoder, seq) ; break ; case 's': consoleSession.HandleSchemaResponse(this, decoder, seq) ; break ; case 'c': consoleSession.HandleContentIndicator(this, decoder, seq, true, false) ; break ; case 'i': consoleSession.HandleContentIndicator(this, decoder, seq, false, true) ; break ; case 'g': consoleSession.HandleContentIndicator(this, decoder, seq, true, true) ; break ; default: log.Error("Invalid message type recieved with opcode " + opcode) ; break ; } } lock (lockObject) { outSession.MessageAccept(rangeSet) ; } }
public void MessageTransfer(IMessage msg) { MSDecoder decoder = new MSDecoder(); decoder.Init(msg.Body); RangeSet rangeSet = new RangeSet(); rangeSet.Add(msg.Id); char opcode = 'x'; long seq = -1; while (this.CheckHeader(decoder, out opcode, out seq)) { //log.Debug("Message recieved with opcode " + opcode + " and sequence " + seq) ; //log.Debug(System.Text.Encoding.UTF8.GetString(msg.Body.ToArray())) ; switch (opcode) { case 'b': consoleSession.HandleBrokerResponse(this, decoder, seq); break; case 'p': consoleSession.HandlePackageIndicator(this, decoder, seq); break; case 'z': consoleSession.HandleCommandComplete(this, decoder, seq); break; case 'q': consoleSession.HandleClassIndicator(this, decoder, seq); break; case 'm': consoleSession.HandleMethodResponse(this, decoder, seq); break; case 'h': consoleSession.HandleHeartbeatIndicator(this, decoder, seq, msg); break; case 'e': consoleSession.HandleEventIndicator(this, decoder, seq); break; case 's': consoleSession.HandleSchemaResponse(this, decoder, seq); break; case 'c': consoleSession.HandleContentIndicator(this, decoder, seq, true, false); break; case 'i': consoleSession.HandleContentIndicator(this, decoder, seq, false, true); break; case 'g': consoleSession.HandleContentIndicator(this, decoder, seq, true, true); break; default: log.Error("Invalid message type recieved with opcode " + opcode); break; } } lock (lockObject) { outSession.MessageAccept(rangeSet); } }
static void Main(string[] args) { Program.TestFunctionalTransitions( Regex.Range('0', '9').NoneOrMany().NonGreedy() + Regex.Range('0', '9').Many().NonGreedy().Group("sec", true).GroupReference(out RegexGroupReference <char> sec_GroupReference) + sec_GroupReference ); #if false RangeSet <char> set = new RangeSet <char>(new CharRangeInfo()); set.Add('a'); set.Add('c'); ; Dictionary <int, int> d = new Dictionary <int, int>(); var chars = Regex.Range('\0', 'z', true, false); var tchars = Regex.Range(new TT <char>('a'), new TT <char>('z'), false, true); var phone = Regex.Range(0, 9).RepeatMany(10); Func <int, RegexObject <char> > func = (count) => { var junkPrefix = Regex.Const('0').NoneOrMany(); Func <int, char> convertor = Convert.ToChar; return(junkPrefix + Enumerable.Range(0, count).Select(num => num.ToString().Select(c => Regex.Const(c)).ConcatMany()).UnionMany()); }; var section = func(255); var dot = Regex.Const('.'); var colon = Regex.Const(':'); var port = func(9999); var ipAddress = new RegexObject <char>[] { section, dot, section, dot, section, dot, section, new RegexObject <char>[] { colon, port }.ConcatMany().Optional() }.ConcatMany(); IRegexFAProvider <char> char_Provider = new RegexFAProvider <char>(new MyCharRegexRunContextInfo()); var char_nfa = char_Provider.GenerateRegexFSMFromRegexObject(ipAddress, RegexOptions.None); //var debuginfo = char_nfa.GetDebugInfo(); var char_dfa = char_Provider.GenerateRegexDFAFromRegexFSM(char_nfa); ; Action <RegexObject <char> > action = regexObj => { var ___nfa = char_Provider.GenerateRegexFSMFromRegexObject(regexObj, RegexOptions.None); var ___dfa = char_Provider.GenerateRegexDFAFromRegexFSM(___nfa); IEnumerable <char> inputs = Enumerable.Repeat <Func <int, int> >(new Random().Next, 25).Select(nextFunc => (char)('a' - 1 + nextFunc(4))); char[] ___charArray = inputs.ToArray(); IRegexFSM <char> ___fsm; #if false ___fsm = new RegexFSM <char>() { StartState = ___dfa.StartState }; #else ___fsm = ___dfa; #endif ___fsm.TransitMany(___charArray); var ___matches = ___fsm.Matches; }; action?.Invoke(Regex.Const('a').Optional().Concat(Regex.Const('b').Concat(Regex.Const('c').Optional()))); #endif Func <int, int, RegexRange <string> > func_adpator = (min, max) => new RegexRangeAdaptor <int, string>( min, max, (source => source.ToString()), (target => int.Parse(target)) ); var section_adpator = func_adpator(0, 255); var dot_adaptor = new RegexConstAdaptor <char, string>('.', (source => source.ToString()), (target => target[0])); var colon_adaptor = new RegexConstAdaptor <char, string>(':', (source => source.ToString()), (target => target[0])); var port_adaptor = func_adpator(0, 9999); var ipAddress_adaptor = new RegexObject <string>[] { section_adpator, dot_adaptor, section_adpator, dot_adaptor, section_adpator, dot_adaptor, section_adpator, new RegexObject <string>[] { colon_adaptor, port_adaptor }.ConcatMany().Optional() }.ConcatMany(); IRegexFAProvider <string> string_Provider = new RegexFAProvider <string>(new MyStringRegexRunContextInfo()); var string_nfa = string_Provider.GenerateRegexFSMFromRegexObject(ipAddress_adaptor, RegexOptions.None); var string_dfa = string_Provider.GenerateRegexDFAFromRegexFSM(string_nfa); ; Random random = new Random(); int 样本树 = 100; var ipAddressStrFragments = Enumerable.Repeat( new Tuple <Func <int>, Func <double> >( (() => random.Next(4, 6)), (() => random.NextDouble() * 1.15) ), 样本树 ) .Select(tuple => { int groupCount = tuple.Item1(); int sectionMax = 255; int portMax = 9999; return (Enumerable.Repeat <IEnumerable <string> >( new string[] { ((int)(sectionMax * tuple.Item2())).ToString(), "." }, 3) .Aggregate((ss1, ss2) => ss1.Concat(ss2)) .Concat(groupCount > 3 ? new string[] { ((int)(sectionMax * tuple.Item2())).ToString() } .Concat(groupCount > 4 ? new string[] { ":", ((int)(portMax * tuple.Item2())).ToString() } : Enumerable.Empty <string>() ) : Enumerable.Empty <string>() )); }); #if false IRegexFSM <char> char_fsm = char_dfa; var matchesArray = ipAddressStrFragments .Select(ipAddressStrFragment => string.Join(string.Empty, ipAddressStrFragment)) .Select(ipAddressStr => { char_fsm.TransitMany(ipAddressStr); return(char_fsm.Matches); }) .ToArray(); ; #else IRegexFSM <string> string_fsm = string_dfa; var matchesArray = ipAddressStrFragments .Select(ipAddressStr => { string_fsm.TransitMany(ipAddressStr); return(string_fsm.Matches); }) .ToArray(); ; #endif }