public static CoReMethodName ToCoReName([NotNull] this IMethodName name) { var builder = new StringBuilder(); if (name.IsConstructor) { builder.Append(name.DeclaringType.ToName(), ".<init>("); StringBuilderUtils.Append(builder, name.Parameters.Select(n => n.ValueType.ToName() + ";").ToArray()); builder.Append(")LSystem/Void;"); } else { builder.Append(name.DeclaringType.ToName(), "."); builder.Append(name.IsUnknown ? "unknown" : name.Name); builder.Append("("); // TODO @seb: fix analysis and remove check; if (name.Parameters != null) { StringBuilderUtils.Append( builder, name.Parameters.Select(n => n.ValueType.ToName() + ";").ToArray()); } builder.Append(")", name.ReturnType.ToName(), ";"); } return(new CoReMethodName(builder.ToString())); }
private void RecoverLog(string sFile) { const int BUFFER_COUNT = 4096; StreamReader srLog = new StreamReader(new FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), _encoding); try { StringBuilder sb = new StringBuilder(); char[] cBuffer = new char[BUFFER_COUNT]; int iCharactersRead = BUFFER_COUNT; string sFindPrefix = _messageFactory.GetSearchStringMessageEndPrefix(); string sFindSuffix = _messageFactory.GetSearchStringMessageEndSuffix() + Environment.NewLine; if (log.IsDebugEnabled) { log.DebugFormat("RecoverLog - FindPrefix={0} FindSuffix={1}", sFindPrefix, sFindSuffix); } int iFindStart = 0; int iMessageEnd; string sMessage; MessageDirection direction; IMessage message; int iIndex; int recordLength; bool parseNext; IMessageSequenceReset reset; ArrayList alIndex; while (iCharactersRead != 0) { iCharactersRead = srLog.Read(cBuffer, 0, BUFFER_COUNT); sb.Append(cBuffer, 0, iCharactersRead); if (log.IsDebugEnabled) { log.DebugFormat("RecoverLog - CharactersRead={0} StringBuilder.Length={1}", iCharactersRead, sb.Length); } do { parseNext = false; iMessageEnd = StringBuilderUtils.Find(sb, sFindPrefix, iFindStart); if (iMessageEnd > 0) { iFindStart = iMessageEnd; iMessageEnd = StringBuilderUtils.Find(sb, sFindSuffix, iMessageEnd + sFindPrefix.Length); if (iMessageEnd > 0) { iFindStart = 0; direction = MessageDirectionFromChar(sb[0]); sMessage = sb.ToString(2, iMessageEnd - 1); recordLength = sMessage.Length + 4; //parse message to object if (log.IsDebugEnabled) { log.DebugFormat("RecoverLog - Parse message / Message={0}", sMessage); } message = _messageFactory.Parse(sMessage); //write to index file if (log.IsDebugEnabled) { log.DebugFormat("RecoverLog - Write to index file / Direction={0} MsgSeqNum={1} Length={2}", direction, message.MsgSeqNum, recordLength); } _bwIndex.Write((byte)direction); _bwIndex.Write(message.MsgSeqNum); _bwIndex.Write(recordLength); _bwIndex.Flush(); //add to memory index iIndex = _alMessages.Add(new MessageIndex(direction, message.MsgSeqNum, recordLength)); if (iIndex != -1) { AddDirectionIndex(direction, message.MsgSeqNum, iIndex); } else { reset = (IMessageSequenceReset)message; alIndex = GetMessageDirectionArrayList(direction); ProcessSystemResetMsgSeqNum(reset.NewSeqNo, alIndex); } //remove from stream sb.Remove(0, recordLength); //check if room for another message in buffer if (sb.Length > sFile.Length) { parseNext = true; } } } else { iFindStart = sb.Length - sFindPrefix.Length; if (iFindStart < 0) { iFindStart = 0; } } } while (parseNext); } } finally { srLog.Close(); } }