public static IByteBuffer Encode(IByteBuffer src, int offset, int length, bool breakLines, Base64Dialect dialect) => Encode(src, offset, length, breakLines, dialect, src.Allocator);
public static unsafe IByteBuffer Decode(IByteBuffer src, int offset, int length, Base64Dialect dialect, IByteBufferAllocator allocator) { if (src == null) { throw new ArgumentNullException(nameof(src)); } if (dialect.decodabet == null) { throw new ArgumentNullException(nameof(dialect.decodabet)); } if ((offset < src.ReaderIndex) || (offset + length > src.ReaderIndex + src.ReadableBytes)) { throw new ArgumentOutOfRangeException(nameof(offset)); } Contract.Assert(dialect.decodabet.Length == 127, "decodabet.Length must be 127!"); if (length <= 0) { return(Unpooled.Empty); } int outLength = length * 3 / 4; IByteBuffer dest = allocator.Buffer(outLength); int charCount = 0; int destIndex = dest.WriterIndex; fixed(sbyte *decodabet = dialect.decodabet) { if ((src.IoBufferCount == 1) && (dest.IoBufferCount == 1)) { charCount = DecodeUsingPointer(src, dest, decodabet, offset, length); } else { charCount = DecodeUsingGetSet(src, dest, decodabet, offset, length); } } return(dest.SetIndex(destIndex, destIndex + charCount)); }
public static IByteBuffer Decode(IByteBuffer src, int offset, int length, Base64Dialect dialect) => Decode(src, offset, length, dialect, src.Allocator);
public static IByteBuffer Encode(IByteBuffer src, bool breakLines, Base64Dialect dialect) => Encode(src, src.ReaderIndex, src.ReadableBytes, breakLines, dialect);
public static IByteBuffer Decode(IByteBuffer src, Base64Dialect dialect) => Decode(src, src.ReaderIndex, src.ReadableBytes, dialect);
public static IByteBuffer Encode(IByteBuffer src, Base64Dialect dialect) => Encode(src, src.ReaderIndex, src.ReadableBytes, dialect.breakLinesByDefault, dialect);
public static unsafe IByteBuffer Encode(IByteBuffer src, int offset, int length, bool breakLines, Base64Dialect dialect, IByteBufferAllocator allocator) { if (src == null) { throw new ArgumentNullException(nameof(src)); } if (dialect.alphabet == null) { throw new ArgumentNullException(nameof(dialect.alphabet)); } Contract.Assert(dialect.alphabet.Length == 64, "alphabet.Length must be 64!"); if ((offset < src.ReaderIndex) || (offset + length > src.ReaderIndex + src.ReadableBytes)) { throw new ArgumentOutOfRangeException(nameof(offset)); } if (length <= 0) { return(Unpooled.Empty); } int remainderLength = length % 3; int outLength = length / 3 * 4 + (remainderLength > 0 ? 4 : 0); outLength += breakLines ? outLength / MAX_LINE_LENGTH : 0; IByteBuffer dest = allocator.Buffer(outLength); int destLength = 0; int destIndex = dest.WriterIndex; fixed(byte *alphabet = dialect.alphabet) { if ((src.IoBufferCount == 1) && (dest.IoBufferCount == 1)) { destLength = EncodeUsingPointer(alphabet, src, dest, offset, length, breakLines); } else { destLength = EncodeUsingGetSet(alphabet, src, dest, offset, length, breakLines); } } return(dest.SetIndex(destIndex, destIndex + destLength)); }
public Base64Encoder(bool breakLines, Base64Dialect dialect) { this.breakLines = breakLines; this.dialect = dialect; }
public Base64Decoder(Base64Dialect dialect) { this.dialect = dialect; }