diff options
Diffstat (limited to 'crypto/src/asn1/ASN1Generator.cs')
-rw-r--r-- | crypto/src/asn1/ASN1Generator.cs | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/crypto/src/asn1/ASN1Generator.cs b/crypto/src/asn1/ASN1Generator.cs index cd2d06e72..28fffc6ab 100644 --- a/crypto/src/asn1/ASN1Generator.cs +++ b/crypto/src/asn1/ASN1Generator.cs @@ -1,20 +1,23 @@ +using System; using System.IO; namespace Org.BouncyCastle.Asn1 { public abstract class Asn1Generator + : IDisposable { - private Stream _out; + private Stream m_outStream; - protected Asn1Generator( - Stream outStream) + protected Asn1Generator(Stream outStream) { - _out = outStream; + m_outStream = outStream ?? throw new ArgumentNullException(nameof(outStream)); } - protected Stream Out + protected abstract void Finish(); + + protected Stream OutStream { - get { return _out; } + get { return m_outStream ?? throw new InvalidOperationException(); } } public abstract void AddObject(Asn1Encodable obj); @@ -23,6 +26,26 @@ namespace Org.BouncyCastle.Asn1 public abstract Stream GetRawOutputStream(); - public abstract void Close(); + #region IDisposable + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (m_outStream != null) + { + Finish(); + m_outStream = null; + } + } + } + + #endregion } } |