[% IF ieTypeData.ieCardinality == 1 -%][% IF ieTypeData.grouped == "Yes" -%]
					[% ieTypeData.grpIeInstClassName %] groupedIeInstance =
					dynamic_cast<
					[% ieTypeData.grpIeInstClassName %]&>(ieObject.getGroupedIe(msgType, [% ieTypeData.instance %]));
					rc = groupedIeInstance.decode[% ieTypeData.grpIeInstClassName %](buffer, data.[% ieTypeData.ieVarName %], ieHeader.length);
[% ELSE -%]
					rc = ieObject.decode[% ieTypeData.ieType %]Ie(buffer, data.[% ieTypeData.ieVarName %], ieHeader.length);
[% END -%]
[% ELSE -%]
					// First check if we have enough space left to decode and store this instance
                    if (data.[% ieTypeData.ieVarName %]Count == [% ieTypeData.ieCardinality %])
                    {
                        errorStream.add((char *)"More than [% ieTypeData.ieCardinality %] instances of [% ieTypeData.ieVarName %] received\n");
                        return false;
                    }
[% IF ieTypeData.grouped == "Yes" -%]
                    [% ieTypeData.grpIeInstClassName %] groupedIeInstance =
                    dynamic_cast<
                    [% ieTypeData.grpIeInstClassName %]&>(ieObject.getGroupedIe(msgType, [% ieTypeData.instance %]));
                    rc = groupedIeInstance.decode[% ieTypeData.grpIeInstClassName %](buffer,
                    data.[% ieTypeData.ieVarName %][data.[% ieTypeData.ieVarName %]Count], ieHeader.length);
                    data.[% ieTypeData.ieVarName %]Count++; // TODO Count validation
[% ELSE -%]
					rc = ieObject.decode[% ieTypeData.ieType %]Ie(buffer, data.[% ieTypeData.ieVarName %][[% ieTypeData.ieVarName %]Count], ieHeader.length);
					data.[% ieTypeData.ieVarName %]Count++; // TODO Count validation
[% END -%]
[% END -%]