public ClusterLoggingProvider(SensorType sensorType1, SensorType sensorType2, CancellationToken externalToken) //: this(new CorrectedAccelerometerProvider(sensorType1), new CorrectedAccelerometerProvider(sensorType2)) { } : base() { // Quick shortcut lambda so I don't have to type all that crap out just to get the words "SensorType.Accelerometer" anytime I want 'em. Func <SensorType, string> TypeName = (SensorType s) => Enum.GetName(typeof(SensorType), s); if (sensorType1.IsOneOf(OrientationSensorTypes)) { if (!default(T1).CanConvert <T1, Quaternion>()) { throw new InvalidCastException($"SensorType {TypeName(sensorType1)} requires that T1 be Quaternion type."); } AddProvider(new FrameShiftedOrientationProvider(sensorType1)); } else if (sensorType1.IsOneOf(VectorSensorTypes)) { if (!default(T1).CanConvert <T1, Vector3>()) { throw new InvalidCastException($"SensorType {TypeName(sensorType1)} requires that T1 be Vector3 type."); } AddProvider(new CorrectedAccelerometerProvider(sensorType1)); } else { throw new ArgumentException($"Sensor type {TypeName(sensorType1)} is neither Quaternion nor Vector3. Construct its provider manually without using this shortcut form."); } if (sensorType2.IsOneOf(OrientationSensorTypes)) { if (!default(T2).CanConvert <T2, Quaternion>()) { throw new InvalidCastException($"SensorType {TypeName(sensorType2)} requires that T2 be Quaternion type."); } AddProvider(new FrameShiftedOrientationProvider(sensorType2)); } else if (sensorType2.IsOneOf(VectorSensorTypes)) { if (!default(T2).CanConvert <T2, Vector3>()) { throw new InvalidCastException($"SensorType {TypeName(sensorType2)} requires that T1 be Vector3 type."); } AddProvider(new CorrectedAccelerometerProvider(sensorType2)); } else { throw new ArgumentException($"Sensor type {TypeName(sensorType2)} is neither Quaternion nor Vector3. Construct its provider manually without using this shortcut form."); } }
protected IProvider GetProvider(SensorType sensorType) { if (sensorType.IsOneOf(VectorSensorTypes)) { return((IProvider) new Vector3Provider(sensorType)); } else if (sensorType.IsOneOf(OrientationSensorTypes)) { return((IProvider) new OrientationSensorProvider(sensorType)); } else { throw new ArgumentException($"Sensor type {Enum.GetName(typeof(SensorType), sensorType)} not recognized as either Vector or Quaternion type."); } }