diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2022-09-14 17:25:07 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2022-09-14 17:25:07 +0700 |
commit | 70efdd3343573c6c2686486cf308490dd4a20d24 (patch) | |
tree | 396eb8424871e4e65656866191d851e53f151169 /crypto/src | |
parent | DateTimeObject => nullable DateTime (diff) | |
download | BouncyCastle.NET-ed25519-70efdd3343573c6c2686486cf308490dd4a20d24.tar.xz |
Add MapElements methods
Diffstat (limited to 'crypto/src')
-rw-r--r-- | crypto/src/asn1/Asn1Sequence.cs | 30 | ||||
-rw-r--r-- | crypto/src/asn1/Asn1Set.cs | 12 |
2 files changed, 26 insertions, 16 deletions
diff --git a/crypto/src/asn1/Asn1Sequence.cs b/crypto/src/asn1/Asn1Sequence.cs index 3ceea4521..1a123e26d 100644 --- a/crypto/src/asn1/Asn1Sequence.cs +++ b/crypto/src/asn1/Asn1Sequence.cs @@ -195,6 +195,18 @@ namespace Org.BouncyCastle.Asn1 get { return elements.Length; } } + public virtual T[] MapElements<T>(Func<Asn1Encodable, T> func) + { + // NOTE: Call Count here to 'force' a LazyDerSequence + int count = Count; + T[] result = new T[count]; + for (int i = 0; i < count; ++i) + { + result[i] = func(elements[i]); + } + return result; + } + public virtual Asn1Encodable[] ToArray() { return Asn1EncodableVector.CloneElements(elements); @@ -246,26 +258,12 @@ namespace Org.BouncyCastle.Asn1 // TODO[asn1] Preferably return an Asn1BitString[] (doesn't exist yet) internal DerBitString[] GetConstructedBitStrings() { - // NOTE: Call Count here to 'force' a LazyDerSequence - int count = Count; - DerBitString[] bitStrings = new DerBitString[count]; - for (int i = 0; i < count; ++i) - { - bitStrings[i] = DerBitString.GetInstance(elements[i]); - } - return bitStrings; + return MapElements(DerBitString.GetInstance); } internal Asn1OctetString[] GetConstructedOctetStrings() { - // NOTE: Call Count here to 'force' a LazyDerSequence - int count = Count; - Asn1OctetString[] octetStrings = new Asn1OctetString[count]; - for (int i = 0; i < count; ++i) - { - octetStrings[i] = Asn1OctetString.GetInstance(elements[i]); - } - return octetStrings; + return MapElements(Asn1OctetString.GetInstance); } // TODO[asn1] Preferably return an Asn1BitString (doesn't exist yet) diff --git a/crypto/src/asn1/Asn1Set.cs b/crypto/src/asn1/Asn1Set.cs index 1045b7f74..b2a654d68 100644 --- a/crypto/src/asn1/Asn1Set.cs +++ b/crypto/src/asn1/Asn1Set.cs @@ -162,6 +162,18 @@ namespace Org.BouncyCastle.Asn1 get { return elements.Length; } } + public virtual T[] MapElements<T>(Func<Asn1Encodable, T> func) + { + // NOTE: Call Count here to 'force' a LazyDerSet + int count = Count; + T[] result = new T[count]; + for (int i = 0; i < count; ++i) + { + result[i] = func(elements[i]); + } + return result; + } + public virtual Asn1Encodable[] ToArray() { return Asn1EncodableVector.CloneElements(elements); |