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

package org.onosproject.xran.codecs.api;

import org.openmuc.jasn1.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);
	}
}
