public void SerializeData(Stream stream) { switch (m_Type) { case DataType.Enum: case DataType.UInt8: case DataType.UInt8z: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessByteRange data = new GarminFitnessByteRange(m_ByteValues[i]); data.Serialize(stream); } break; } case DataType.SInt8: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessSByteRange data = new GarminFitnessSByteRange(m_SByteValues[i]); data.Serialize(stream); } break; } case DataType.UInt16: case DataType.UInt16z: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessUInt16Range data = new GarminFitnessUInt16Range(m_UInt16Values[i]); data.Serialize(stream); } break; } case DataType.SInt16: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessInt16Range data = new GarminFitnessInt16Range(m_Int16Values[i]); data.Serialize(stream); } break; } case DataType.UInt32: case DataType.UInt32z: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessUInt32Range data = new GarminFitnessUInt32Range(m_UInt32Values[i]); data.Serialize(stream); } break; } case DataType.SInt32: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessInt32Range data = new GarminFitnessInt32Range(m_Int32Values[i]); data.Serialize(stream); } break; } case DataType.Float32: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessFloatRange data = new GarminFitnessFloatRange(m_SingleValues[i]); data.Serialize(stream); } break; } case DataType.Float64: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessDoubleRange data = new GarminFitnessDoubleRange(m_DoubleValues[i]); data.Serialize(stream); } break; } case DataType.String: { Byte[] valueStored = new Byte[FieldSize]; for(int i = 0; i < valueStored.Length; ++i) { if (i < m_ByteValues.Length) { valueStored[i] = m_ByteValues[i]; } else { valueStored[i] = 0; } } stream.Write(valueStored, 0, valueStored.Length); break; } case DataType.Byte: { stream.Write(m_ByteValues, 0, m_ByteValues.Length); break; } default: { Debug.Assert(false); break; } } }
public void DeserializeData(Stream stream, bool isLittleEndian) { switch (m_Type) { case DataType.Enum: case DataType.UInt8: case DataType.UInt8z: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessByteRange data = new GarminFitnessByteRange(0); data.Deserialize(stream, Constants.CurrentVersion); m_ByteValues[i] = data; } break; } case DataType.SInt8: { for (int i = 0; i < ArraySize; ++i) { GarminFitnessSByteRange data = new GarminFitnessSByteRange(0); data.Deserialize(stream, Constants.CurrentVersion); m_SByteValues[i] = data; } break; } case DataType.UInt16: case DataType.UInt16z: { for (int i = 0; i < ArraySize; ++i) { Byte[] data = new Byte[sizeof(UInt16)]; stream.Read(data, 0, sizeof(UInt16)); m_UInt16Values[i] = BitConverter.ToUInt16(data, 0); if (!isLittleEndian) { Byte temp = data[0]; data[0] = data[1]; data[1] = temp; m_UInt16Values[i] = BitConverter.ToUInt16(data, 0); } } break; } case DataType.SInt16: { for (int i = 0; i < ArraySize; ++i) { Byte[] data = new Byte[sizeof(Int16)]; stream.Read(data, 0, sizeof(UInt16)); m_Int16Values[i] = BitConverter.ToInt16(data, 0); if (!isLittleEndian) { Byte temp = data[0]; data[0] = data[1]; data[1] = temp; m_Int16Values[i] = BitConverter.ToInt16(data, 0); } } break; } case DataType.UInt32: case DataType.UInt32z: { for (int i = 0; i < ArraySize; ++i) { Byte[] data = new Byte[sizeof(UInt32)]; stream.Read(data, 0, sizeof(UInt32)); m_UInt32Values[i] = BitConverter.ToUInt32(data, 0); if (!isLittleEndian) { Byte temp = data[0]; data[0] = data[3]; data[3] = temp; temp = data[1]; data[1] = data[2]; data[2] = temp; m_UInt32Values[i] = BitConverter.ToUInt32(data, 0); } } break; } case DataType.SInt32: { for (int i = 0; i < ArraySize; ++i) { Byte[] data = new Byte[sizeof(UInt32)]; stream.Read(data, 0, sizeof(UInt32)); m_Int32Values[i] = BitConverter.ToInt32(data, 0); if (!isLittleEndian) { Byte temp = data[0]; data[0] = data[3]; data[3] = temp; temp = data[1]; data[1] = data[2]; data[2] = temp; m_Int32Values[i] = BitConverter.ToInt32(data, 0); } } break; } case DataType.Float32: { for (int i = 0; i < ArraySize; ++i) { Byte[] data = new Byte[sizeof(Single)]; stream.Read(data, 0, sizeof(Single)); m_SingleValues[i] = BitConverter.ToSingle(data, 0); if (!isLittleEndian) { Byte temp = data[0]; data[0] = data[3]; data[3] = temp; temp = data[1]; data[1] = data[2]; data[2] = temp; m_SingleValues[i] = BitConverter.ToSingle(data, 0); } } break; } case DataType.Float64: { for (int i = 0; i < ArraySize; ++i) { Byte[] data = new Byte[sizeof(Double)]; stream.Read(data, 0, sizeof(Double)); m_DoubleValues[i] = BitConverter.ToDouble(data, 0); if (!isLittleEndian) { Byte temp = data[0]; data[0] = data[7]; data[7] = temp; temp = data[1]; data[1] = data[6]; data[6] = temp; temp = data[2]; data[2] = data[5]; data[5] = temp; temp = data[3]; data[3] = data[4]; data[4] = temp; m_DoubleValues[i] = BitConverter.ToDouble(data, 0); } } break; } case DataType.String: case DataType.Byte: { stream.Read(m_ByteValues, 0, m_ByteValues.Length); break; } default: { Debug.Assert(false); break; } } }