/// <summary> /// Decode RawData type (for SimpleTypeDescription!?) /// </summary> /// <param name="binaryDecoder"></param> /// <param name="fieldMetaData"></param> /// <returns></returns> private object DecodeRawData(BinaryDecoder binaryDecoder, FieldMetaData fieldMetaData) { if (fieldMetaData.BuiltInType != 0)// && fieldMetaData.DataType.Equals(new NodeId(fieldMetaData.BuiltInType))) { try { switch (fieldMetaData.ValueRank) { case ValueRanks.Scalar: return(DecodeRawScalar(binaryDecoder, fieldMetaData.BuiltInType)); case ValueRanks.OneDimension: case ValueRanks.TwoDimensions: return(binaryDecoder.ReadArray(null, fieldMetaData.ValueRank, (BuiltInType)fieldMetaData.BuiltInType)); case ValueRanks.OneOrMoreDimensions: case ValueRanks.Any: // Scalar or Array with any number of dimensions case ValueRanks.ScalarOrOneDimension: // not implemented default: Utils.Trace("Decoding ValueRank = {0} not supported yet !!!", fieldMetaData.ValueRank); break; } } catch (Exception ex) { Utils.Trace(ex, "Error reading element for RawData."); return(StatusCodes.BadDecodingError); } } return(null); }
public void TestArray(IList <string> expected) { using (var stream = new MemoryStream()) using (var encoder = new BinaryEncoder(stream)) using (var decoder = new BinaryDecoder(stream)) { encoder.WriteArray(expected, (s, e) => s.WriteString(e)); stream.Seek(0, SeekOrigin.Begin); var actual = decoder.ReadArray(s => s.ReadString()); Assert.AreEqual(expected, actual); } }
public void DecodeArray(IList <int> expectedValue, int expectedLength, byte[] value) { using (var stream = new MemoryStream(value)) using (var decoder = new BinaryDecoder(stream)) { var decode = decoder.ReadArray(s => s.ReadInt()); Assert.AreEqual(expectedLength, stream.Position, "Decode offset error"); Assert.AreEqual(expectedValue, decode); stream.Seek(0, SeekOrigin.Begin); decoder.SkipArray(s => s.SkipInt()); Assert.AreEqual(expectedLength, stream.Position, "Skip offset error"); } }