public virtual byte[] CreateExtras()
        {
            var extras   = new byte[8];
            var typeCode = Type.GetTypeCode(typeof(T));
            var flag     = (uint)((int)typeCode | 0x0100);

            Converter.FromUInt32(flag, extras, 0);
            Converter.FromUInt32(Expires, extras, 4);

            return(extras);
        }
        public virtual byte[] CreateExtras()
        {
            var        extras      = new byte[8];
            var        format      = (byte)GetFormat();
            const byte compression = (byte)Compression.None;

            Converter.SetBit(ref extras[0], 0, Converter.GetBit(format, 0));
            Converter.SetBit(ref extras[0], 1, Converter.GetBit(format, 1));
            Converter.SetBit(ref extras[0], 2, Converter.GetBit(format, 2));
            Converter.SetBit(ref extras[0], 3, Converter.GetBit(format, 3));
            Converter.SetBit(ref extras[0], 4, false);
            Converter.SetBit(ref extras[0], 5, Converter.GetBit(compression, 0));
            Converter.SetBit(ref extras[0], 6, Converter.GetBit(compression, 1));
            Converter.SetBit(ref extras[0], 7, Converter.GetBit(compression, 2));

            var typeCode = (ushort)Type.GetTypeCode(typeof(T));

            Converter.FromUInt16(typeCode, extras, 2);
            Converter.FromUInt32(Expires, extras, 4);

            Format      = (DataFormat)format;
            Compression = compression;

            Flags.DataFormat  = Format;
            Flags.Compression = Compression;
            Flags.TypeCode    = (TypeCode)typeCode;

            return(extras);
        }
        /// <summary>
        /// Writes a <see cref="UInt32" /> to a new buffer.
        /// </summary>
        /// <param name="converter">The converter.</param>
        /// <param name="value">The value.</param>
        /// <param name="useNbo">If <c>true</c> will make most significant byte first.</param>
        public static byte[] FromUInt32(this IByteConverter converter, uint value, bool useNbo)
        {
            var buffer = new byte[sizeof(uint)];

            converter.FromUInt32(value, buffer, useNbo);

            return(buffer);
        }
Esempio n. 4
0
        public byte[] Serialize <T>(T value)
        {
            var bytes    = new byte[] { };
            var typeCode = Type.GetTypeCode(typeof(T));

            switch (typeCode)
            {
            case TypeCode.Empty:
            case TypeCode.DBNull:
            case TypeCode.String:
            case TypeCode.Char:
                _converter.FromString(Convert.ToString(value), ref bytes, 0);
                break;

            case TypeCode.Int16:
                _converter.FromInt16(Convert.ToInt16(value), ref bytes, 0);
                break;

            case TypeCode.UInt16:
                _converter.FromUInt16(Convert.ToUInt16(value), ref bytes, 0);
                break;

            case TypeCode.Int32:
                _converter.FromInt32(Convert.ToInt32(value), ref bytes, 0);
                break;

            case TypeCode.UInt32:
                _converter.FromUInt32(Convert.ToUInt32(value), ref bytes, 0);
                break;

            case TypeCode.Int64:
                _converter.FromInt64(Convert.ToInt64(value), ref bytes, 0);
                break;

            case TypeCode.UInt64:
                _converter.FromUInt64(Convert.ToUInt64(value), ref bytes, 0);
                break;

            case TypeCode.Single:
            case TypeCode.Double:
            case TypeCode.Decimal:
            case TypeCode.DateTime:
            case TypeCode.Boolean:
            case TypeCode.SByte:
            case TypeCode.Byte:
            case TypeCode.Object:
                bytes = SerializeAsJson(value);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(bytes);
        }
Esempio n. 5
0
        public virtual byte[] CreateHeader(byte[] extras, byte[] body, byte[] key)
        {
            var header      = new byte[24];
            var totalLength = extras.GetLengthSafe() + key.GetLengthSafe() + body.GetLengthSafe();

            Converter.FromByte((byte)Magic.Request, header, HeaderIndexFor.Magic);
            Converter.FromByte((byte)OperationCode, header, HeaderIndexFor.Opcode);
            Converter.FromInt16((short)key.GetLengthSafe(), header, HeaderIndexFor.KeyLength);
            Converter.FromByte((byte)extras.GetLengthSafe(), header, HeaderIndexFor.ExtrasLength);

            if (VBucket != null)
            {
                Converter.FromInt16((short)VBucket.Index, header, HeaderIndexFor.VBucket);
            }

            Converter.FromInt32(totalLength, header, HeaderIndexFor.BodyLength);
            Converter.FromUInt32(Opaque, header, HeaderIndexFor.Opaque);
            Converter.FromUInt64(Cas, header, HeaderIndexFor.Cas);

            return(header);
        }
 /// <summary>
 /// Writes a <see cref="UInt32" /> to a new buffer, using network byte order.
 /// </summary>
 /// <param name="converter">The converter.</param>
 /// <param name="value">The value.</param>
 public static byte[] FromUInt32(this IByteConverter converter, uint value)
 {
     return(converter.FromUInt32(value, true));
 }
 /// <summary>
 /// Writes a <see cref="UInt32"/> to a buffer, using network byte order.
 /// </summary>
 /// <param name="converter">The converter.</param>
 /// <param name="value">The value.</param>
 /// <param name="buffer">The buffer.</param>
 public static void FromUInt32(this IByteConverter converter, uint value, Span <byte> buffer)
 {
     converter.FromUInt32(value, buffer, true);
 }