private IRPulseMessage(IReadOnlyPulseSpaceUnitList pulsesAndSpacesAsNumberOfUnits, int unitDuration, bool makeCopy) { if (pulsesAndSpacesAsNumberOfUnits == null) { throw new ArgumentNullException(nameof(pulsesAndSpacesAsNumberOfUnits)); } if (unitDuration < Utility.UnitDurationMinimum || unitDuration > Utility.UnitDurationMaximum) { throw new ArgumentOutOfRangeException(nameof(unitDuration), unitDuration, "Unit duration is invalid."); } UnitDuration = unitDuration; if (makeCopy) { _units = pulsesAndSpacesAsNumberOfUnits.Copy(); } else { _units = (PulseSpaceUnitList)pulsesAndSpacesAsNumberOfUnits; } _durations = new PulseSpaceDurationList(unitDuration, pulsesAndSpacesAsNumberOfUnits); UnitCount = _units.UnitCount; }
/// <param name="pulsesAndSpacesAsDurations">The pulse/space durations. These will be rounded to multiples of the <paramref name="unitDuration"/>.</param> /// <param name="unitDuration">How long each unit lasts, in microseconds.</param> public IRPulseMessage(IReadOnlyPulseSpaceDurationList pulsesAndSpacesAsDurations, int unitDuration) { if (pulsesAndSpacesAsDurations == null) { throw new ArgumentNullException(nameof(pulsesAndSpacesAsDurations)); } if (unitDuration < Utility.UnitDurationMinimum || unitDuration > Utility.UnitDurationMaximum) { throw new ArgumentOutOfRangeException(nameof(unitDuration), unitDuration, "Unit duration is invalid."); } UnitDuration = unitDuration; _durations = pulsesAndSpacesAsDurations.Copy(unitDuration); // Create a copy because the original buffer might be modified by the caller after we return. _units = new PulseSpaceUnitList(unitDuration, pulsesAndSpacesAsDurations); UnitCount = _units.UnitCount; }