internal static Boolean TakeAwayPreciseTimeFormat()

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;
		}