
package uk.co.wingpath.modbus;

/**
* Class used to specify a group of file registers to be read or written.
*/
public class FileGroup
{
    public final int fileNum;
    public final int address;
    public final int nvalues;

    /**
    * Constructs a FileGroup.
    * @param fileNum file number.
    * @param address start address of group.
    * @param nvalues number of values in the group.
    */
    public FileGroup (int fileNum, int address, int nvalues)
    {
        this.fileNum = fileNum;
        this.address = address;
        this.nvalues = nvalues;
    }

    /**
    * Counts the total number of values in an array of groups.
    * @return total number of values.
    */
    public static int countValues (FileGroup [] groups)
    {
        int nvalues = 0;

        for (FileGroup group : groups)
            nvalues += group.nvalues;

        return nvalues;
    }

    @Override
    public boolean equals (Object obj)
    {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (obj.getClass () != getClass ())
            return false;
        FileGroup rec = (FileGroup) obj;
        return
            rec.fileNum == fileNum &&
            rec.address == address &&
            rec.nvalues == nvalues;
    }

    @Override
    public int hashCode ()
    {
        int hash = 3;
        hash = 29 * hash + fileNum;
        hash = 29 * hash + address;
        hash = 29 * hash + nvalues;
        return 0;
    }

    @Override
    public String toString ()
    {
        return "[" + fileNum + "," + address + "," + nvalues + "]";
    }
}

