public static IByteBuffer Encode(IByteBuffer src, bool breakLines, IBase64Dialect dialect) => Encode(src, src.ReaderIndex, src.ReadableBytes, breakLines, dialect);
public static IByteBuffer Encode(IByteBuffer src, int offset, int length, bool breakLines, IBase64Dialect dialect) => Encode(src, offset, length, breakLines, dialect, src.Allocator);
public static unsafe IByteBuffer Decode(IByteBuffer src, int offset, int length, IBase64Dialect dialect, IByteBufferAllocator allocator) { if (src is null) { CThrowHelper.ThrowArgumentNullException(CExceptionArgument.src); } //if (dialect.Decodabet is null) //{ // CThrowHelper.ThrowArgumentNullException(CExceptionArgument.dialect_decodabet); //} if ((offset < src.ReaderIndex) || (offset + length > src.WriterIndex /*src.ReaderIndex + src.ReadableBytes*/)) { CThrowHelper.ThrowArgumentOutOfRangeException(CExceptionArgument.offset); } Debug.Assert(dialect.Decodabet.Length == 256, "decodabet.Length must be 256!"); if ((uint)(length - 1) > SharedConstants.TooBigOrNegative) { return(Unpooled.Empty); } int outLength = length * 3 / 4; IByteBuffer dest = allocator.Buffer(outLength); int charCount = 0; int destIndex = dest.WriterIndex; fixed(sbyte *decodabet = &MemoryMarshal.GetReference(dialect.Decodabet)) { if (src.IsSingleIoBuffer && dest.IsSingleIoBuffer) { charCount = DecodeUsingPointer(src, dest, decodabet, offset, length); } else { charCount = DecodeUsingGetSet(src, dest, decodabet, offset, length); } } return(dest.SetIndex(destIndex, destIndex + charCount)); }
public static IByteBuffer Encode(IByteBuffer src, IBase64Dialect dialect) => Encode(src, src.ReaderIndex, src.ReadableBytes, dialect.BreakLinesByDefault, dialect);
public static IByteBuffer Decode(IByteBuffer src, int offset, int length, IBase64Dialect dialect) => Decode(src, offset, length, dialect, src.Allocator);
public static IByteBuffer Decode(IByteBuffer src, IBase64Dialect dialect) => Decode(src, src.ReaderIndex, src.ReadableBytes, dialect);
public static unsafe IByteBuffer Encode(IByteBuffer src, int offset, int length, bool breakLines, IBase64Dialect dialect, IByteBufferAllocator allocator) { if (src is null) { CThrowHelper.ThrowArgumentNullException(CExceptionArgument.src); } //if (dialect.alphabet is null) //{ // CThrowHelper.ThrowArgumentNullException(CExceptionArgument.dialect_alphabet); //} Debug.Assert(dialect.Alphabet.Length == 64, "alphabet.Length must be 64!"); if ((offset < src.ReaderIndex) || (offset + length > src.WriterIndex /*src.ReaderIndex + src.ReadableBytes*/)) { CThrowHelper.ThrowArgumentOutOfRangeException(CExceptionArgument.offset); } if ((uint)(length - 1) > SharedConstants.TooBigOrNegative) { 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 = &MemoryMarshal.GetReference(dialect.Alphabet)) { if (src.IsSingleIoBuffer && dest.IsSingleIoBuffer) { destLength = EncodeUsingPointer(alphabet, src, dest, offset, length, breakLines); } else { destLength = EncodeUsingGetSet(alphabet, src, dest, offset, length, breakLines); } } return(dest.SetIndex(destIndex, destIndex + destLength)); }
public Base64Decoder(IBase64Dialect dialect) { this.dialect = dialect; }
public Base64Encoder(bool breakLines, IBase64Dialect dialect) { this.breakLines = breakLines; this.dialect = dialect; }