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