A byte buffer that tracks position and allows reads and writes of 32 and 64 bit integer values.
Beispiel #1
0
 public V0Header(int cookie, ByteBuffer buffer)
 {
     Cookie = cookie;
     NumberOfSignificantValueDigits = buffer.GetInt();
     LowestTrackableUnitValue = buffer.GetLong();
     HighestTrackableValue = buffer.GetLong();
     PayloadLengthInBytes = int.MaxValue;
     IntegerToDoubleValueConversionRatio = 1.0;
     NormalizingIndexOffset = 0;
 }
 protected override long ReadValue(ByteBuffer sourceBuffer)
 {
     return sourceBuffer.GetLong();
 }
 /// <summary>
 /// Reads an LEB128-64b9B ZigZag encoded 64 bit integer (<see cref="long"/>) value from the given buffer.
 /// </summary>
 /// <param name="buffer">The buffer to read from.</param>
 /// <returns>The value read from the buffer.</returns>
 public static long GetLong(ByteBuffer buffer)
 {
     long v = buffer.Get();
     long value = v & 0x7F;
     if ((v & 0x80) != 0)
     {
         v = buffer.Get();
         value |= (v & 0x7F) << 7;
         if ((v & 0x80) != 0)
         {
             v = buffer.Get();
             value |= (v & 0x7F) << 14;
             if ((v & 0x80) != 0)
             {
                 v = buffer.Get();
                 value |= (v & 0x7F) << 21;
                 if ((v & 0x80) != 0)
                 {
                     v = buffer.Get();
                     value |= (v & 0x7F) << 28;
                     if ((v & 0x80) != 0)
                     {
                         v = buffer.Get();
                         value |= (v & 0x7F) << 35;
                         if ((v & 0x80) != 0)
                         {
                             v = buffer.Get();
                             value |= (v & 0x7F) << 42;
                             if ((v & 0x80) != 0)
                             {
                                 v = buffer.Get();
                                 value |= (v & 0x7F) << 49;
                                 if ((v & 0x80) != 0)
                                 {
                                     v = buffer.Get();
                                     value |= v << 56;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     var unsignRightShiftedValue = (long)((ulong)value >> 1);
     value = unsignRightShiftedValue ^ (-(value & 1));
     return value;
 }
 /// <summary>
 /// Writes a 64 bit integer (<see cref="long"/>) value to the given buffer in LEB128-64b9B-variant ZigZag encoded format.
 /// </summary>
 /// <param name="buffer">The buffer to write to.</param>
 /// <param name="value">The value to write to the buffer.</param>
 public static void PutLong(ByteBuffer buffer, long value)
 {
     value = (value << 1) ^ (value >> 63);
     if (value >> 7 == 0)
     {
         buffer.Put((byte)value);
     }
     else {
         buffer.Put((byte)((value & 0x7F) | 0x80));
         if (value >> 14 == 0)
         {
             buffer.Put((byte)(value >> 7));
         }
         else {
             buffer.Put((byte)(value >> 7 | 0x80));
             if (value >> 21 == 0)
             {
                 buffer.Put((byte)(value >> 14));
             }
             else {
                 buffer.Put((byte)(value >> 14 | 0x80));
                 if (value >> 28 == 0)
                 {
                     buffer.Put((byte)(value >> 21));
                 }
                 else {
                     buffer.Put((byte)(value >> 21 | 0x80));
                     if (value >> 35 == 0)
                     {
                         buffer.Put((byte)(value >> 28));
                     }
                     else {
                         buffer.Put((byte)(value >> 28 | 0x80));
                         if (value >> 42 == 0)
                         {
                             buffer.Put((byte)(value >> 35));
                         }
                         else {
                             buffer.Put((byte)(value >> 35 | 0x80));
                             if (value >> 49 == 0)
                             {
                                 buffer.Put((byte)(value >> 42));
                             }
                             else {
                                 buffer.Put((byte)(value >> 42 | 0x80));
                                 if (value >> 56 == 0)
                                 {
                                     buffer.Put((byte)(value >> 49));
                                 }
                                 else {
                                     buffer.Put((byte)(value >> 49 | 0x80));
                                     buffer.Put((byte)(value >> 56));
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }