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

package org.onosproject.xran.codecs.api;

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

import javax.xml.bind.DatatypeConverter;
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);
	}
}
