using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Modbus.Utility;
namespace Modbus.Data
{
///
/// Collection of discrete values.
///
public class DiscreteCollection : Collection, IModbusMessageDataCollection
{
///
/// Initializes a new instance of the class.
///
public DiscreteCollection ()
{
}
///
/// Initializes a new instance of the class.
///
public DiscreteCollection(params bool[] bits)
: this((IList)bits)
{
}
///
/// Initializes a new instance of the class.
///
public DiscreteCollection(params byte[] bytes)
: this((IList) CollectionUtility.ToBoolArray(new BitArray(bytes)))
{
}
///
/// Initializes a new instance of the class.
///
public DiscreteCollection(IList bits)
: base(bits.IsReadOnly ? new List(bits) : bits)
{
}
///
/// Gets the network bytes.
///
public byte[] NetworkBytes
{
get
{
bool[] bits = new bool[Count];
CopyTo(bits, 0);
BitArray bitArray = new BitArray(bits);
byte[] bytes = new byte[ByteCount];
bitArray.CopyTo(bytes, 0);
return bytes;
}
}
///
/// Gets the byte count.
///
public byte ByteCount
{
get
{
return (byte) ((Count + 7) / 8);
}
}
///
/// Returns a that represents the current .
///
///
/// A that represents the current .
///
public override string ToString()
{
return String.Concat("{", String.Join(", ", CollectionUtility.ToArray(SequenceUtility.ToList(this, delegate(bool discrete) { return discrete ? "1" : "0"; }))), "}");
}
}
}