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));
        }
Exemple #8
0
 public Base64Encoder(bool breakLines, Base64Dialect dialect)
 {
     this.breakLines = breakLines;
     this.dialect    = dialect;
 }
Exemple #9
0
 public Base64Decoder(Base64Dialect dialect)
 {
     this.dialect = dialect;
 }