/**
 * This class file was automatically generated by jASN1 v1.8.2 (http://www.openmuc.org)
 */

package org.onosproject.xran.asn1lib.api;

import org.onosproject.xran.asn1lib.ber.types.BerBitString;

import java.util.Arrays;


public class EUTRANCellIdentifier extends BerBitString {

    private static final long serialVersionUID = 1L;

    public EUTRANCellIdentifier() {
    }

    public EUTRANCellIdentifier(byte[] code) {
        super(code);
    }

    public EUTRANCellIdentifier(byte[] value, int numBits) {
        super(value, numBits);
    }

    @Override
    public int hashCode() {
        return Arrays.hashCode(value);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof EUTRANCellIdentifier) {
            return Arrays.equals(value, ((EUTRANCellIdentifier) obj).value);
        }
        return super.equals(obj);
    }
}
