in csharp/EPAM.Deltix.HdTime/Formatter.cs [179:223]
internal static Boolean TakeAwayPreciseTimeFormat(
String timeFormat,
out MutableString dateTimeFormat,
out IDictionary<Int32, String> preciseTimeFormatAndPosition)
{
Int32 startPosition, endPosition, caretPosition = 0;
Boolean isFormatFound = TryFindPreciseTimeFormat(timeFormat, caretPosition, out startPosition, out endPosition);
if (!isFormatFound)
{
dateTimeFormat = null;
preciseTimeFormatAndPosition = null;
return false;
}
Dictionary<Int32, String> preciseTimeFormats = new Dictionary<Int32, String>();
dateTimeFormat = new MutableString();
Int32 length = endPosition - startPosition + 1;
preciseTimeFormats.Add(startPosition, timeFormat.Substring(startPosition, length));
dateTimeFormat.Append(timeFormat.Substring(caretPosition, startPosition - caretPosition));
caretPosition = endPosition;
isFormatFound = TryFindPreciseTimeFormat(timeFormat, caretPosition, out startPosition, out endPosition);
while (isFormatFound)
{
length = endPosition - startPosition + 1;
preciseTimeFormats.Add(startPosition, timeFormat.Substring(startPosition, length));
dateTimeFormat.Append(timeFormat.Substring(caretPosition + 1, startPosition - caretPosition - 1));
caretPosition = endPosition;
isFormatFound = TryFindPreciseTimeFormat(timeFormat, caretPosition, out startPosition, out endPosition);
}
// at least length >= 1
// append the last part of date time format, in case, if it exists.
if (caretPosition + length < timeFormat.Length)
{
dateTimeFormat.Append(timeFormat.Substring(caretPosition + 1));
}
preciseTimeFormatAndPosition = preciseTimeFormats;
return true;
}