public static void WriteIntoPacket(OutBlob stream, [NotNull] IEnumerable <IUpdateSegment> syncSegments, [NotNull] IEnumerable <IUpdateSegment> initializeSegments, [NotNull] IEnumerable <IUpdateSegment> flagSegments, int numIdBits, int maxIdValue) { stream.BeginBitAccess(); WriteSyncSegments(stream, syncSegments); WriteInitSegments(stream, initializeSegments); // avoid double enumeration of the flagSegments enumerable var enumeratedUpdateSegments = flagSegments as IList <IUpdateSegment> ?? flagSegments.ToList(); WriteInitSegmentsEndMarkerIfNeeded(stream, enumeratedUpdateSegments, numIdBits, maxIdValue); stream.EndBitAccess(); WriteFlagSegments(stream, enumeratedUpdateSegments); }