/**
 * 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.BerInteger;

import java.math.BigInteger;


public class PhysCellId extends BerInteger {

    private static final long serialVersionUID = 1L;

    public PhysCellId() {
    }

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

    public PhysCellId(BigInteger value) {
        super(value);
    }

    public PhysCellId(long value) {
        super(value);
    }

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

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof PhysCellId) {
            return value.intValue() == ((PhysCellId) obj).value.intValue();
        }
        return super.equals(obj);
    }
}
