// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.asn1;

import java.io.IOException;
import java.io.OutputStream;

public abstract class ASN1Primitive extends ASN1Object
{
    ASN1Primitive() {
    }
    
    @Override
    public void encodeTo(final OutputStream outputStream) throws IOException {
        final ASN1OutputStream create = ASN1OutputStream.create(outputStream);
        create.writePrimitive(this, true);
        create.flushInternal();
    }
    
    @Override
    public void encodeTo(final OutputStream outputStream, final String s) throws IOException {
        final ASN1OutputStream create = ASN1OutputStream.create(outputStream, s);
        create.writePrimitive(this, true);
        create.flushInternal();
    }
    
    public static ASN1Primitive fromByteArray(final byte[] array) throws IOException {
        final ASN1InputStream asn1InputStream = new ASN1InputStream(array);
        try {
            final ASN1Primitive object = asn1InputStream.readObject();
            if (asn1InputStream.available() != 0) {
                throw new IOException("Extra data detected in stream");
            }
            return object;
        }
        catch (final ClassCastException ex) {
            throw new IOException("cannot recognise object in stream");
        }
    }
    
    @Override
    public final boolean equals(final Object o) {
        return this == o || (o instanceof ASN1Encodable && this.asn1Equals(((ASN1Encodable)o).toASN1Primitive()));
    }
    
    public final boolean equals(final ASN1Encodable asn1Encodable) {
        return this == asn1Encodable || (null != asn1Encodable && this.asn1Equals(asn1Encodable.toASN1Primitive()));
    }
    
    public final boolean equals(final ASN1Primitive asn1Primitive) {
        return this == asn1Primitive || this.asn1Equals(asn1Primitive);
    }
    
    @Override
    public final ASN1Primitive toASN1Primitive() {
        return this;
    }
    
    ASN1Primitive toDERObject() {
        return this;
    }
    
    ASN1Primitive toDLObject() {
        return this;
    }
    
    @Override
    public abstract int hashCode();
    
    abstract boolean encodeConstructed();
    
    abstract int encodedLength(final boolean p0) throws IOException;
    
    abstract void encode(final ASN1OutputStream p0, final boolean p1) throws IOException;
    
    abstract boolean asn1Equals(final ASN1Primitive p0);
}
