private static void ReadWriteArray(this BitcoinStream bitcoinStream, ref byte[][] data) { if (data == null && bitcoinStream.Serializing) { throw new ArgumentNullException("Impossible to serialize a null array"); } if (bitcoinStream.Serializing) { var len = data == null ? 0 : (ulong)data.Length; if (len > (uint)bitcoinStream.MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } VarInt.StaticWrite(bitcoinStream, len); if (len == 0) { return; } } else { var len = VarInt.StaticRead(bitcoinStream); if (len > (uint)bitcoinStream.MaxArraySize) { throw new ArgumentOutOfRangeException("Array size too big"); } data = new byte[len][]; } for (int i = 0; i < data.Length; i++) { bitcoinStream.ReadWriteArray(ref data[i]); } }
internal static void ReadWriteListBytes(this BitcoinStream bitcoinStream, ref List <byte[]> data) { var dataArray = data?.ToArray(); if (bitcoinStream.Serializing && dataArray == null) { dataArray = new byte[0][]; } bitcoinStream.ReadWriteArray(ref dataArray); if (!bitcoinStream.Serializing) { if (data == null) { data = new List <byte[]>(); } else { data.Clear(); } data.AddRange(dataArray); } }