public virtual FixGroupContainer CreateSeparateList()

in FixAntenna/NetCore/Validation/FixMessage/FixGroupContainer.cs [110:181]


		public virtual FixGroupContainer CreateSeparateList(ValidationFixMessage validationMessage, Message.FixMessage fixMessage,
			int groupsCountTag)
		{
			long groupsCountTemp;
			_fixMessage = validationMessage;
			_groupsCountTag = groupsCountTag;
			if (_fixMessages == null)
			{
				_fixMessages = new List<Message.FixMessage>();
			}

			groupsCountTemp = fixMessage.GetTagValueAsLong(groupsCountTag);
			_groupsCount += (int)groupsCountTemp;

			var fields = new TagValue[fixMessage.Length];
			for (var i = 0; i < fixMessage.Length; i++)
			{
				fields[i] = fixMessage[i];
			}

			_groupStartTag = _util.GetStartTagForGroup(validationMessage.GetMsgType(), groupsCountTag);

			if (groupsCountTemp == 0 && !fixMessage.IsEmpty)
			{
				_fixMessages.Add(fixMessage);
			}

			var message = new Message.FixMessage();
			for (int index = 0, fixFieldsLength = fields.Length; index < fixFieldsLength; index++)
			{
				var field = fields[index];
				if (field.TagId == groupsCountTag)
				{
					if (index == fields.Length - 1)
					{
						var writeUtil = new WriteUtil(this, fixMessage.GetTag(groupsCountTag), groupsCountTemp,
							message).Write();
						groupsCountTemp = writeUtil.GroupsCountTemp;
					}

					continue;
				}

				// TBD: check if we can use "field.equals(fixMessage.GetTag(field.TagId)"
				if (field.TagId == _groupStartTag && !message.IsEmpty ||
					field.Equals(message.GetTag(field.TagId)))
				{
					var writeUtil = new WriteUtil(this, fixMessage.GetTag(groupsCountTag), groupsCountTemp, message)
						.Write();
					groupsCountTemp = writeUtil.GroupsCountTemp;
					message = writeUtil.FixMessage;
					// added last group to the list.
					if (groupsCountTemp - 1 == 0)
					{
						CreateLastGroup(fixMessage.GetTag(groupsCountTag), groupsCountTemp, fields, index,
							fixFieldsLength);
						break;
					}
				}

				message.Add(field);
				if (index == fields.Length - 1 && !message.IsEmpty)
				{
					var writeUtil = new WriteUtil(this, fixMessage.GetTag(groupsCountTag), groupsCountTemp, message)
						.Write();
					groupsCountTemp = writeUtil.GroupsCountTemp;
					message = writeUtil.FixMessage;
				}
			}

			return this;
		}