public RedisCommands(RedisBuffer redisBuffer) { this.redisBuffer = redisBuffer; }
/// <summary> /// Copy an ASCII string to byte array /// </summary> /// <param name="str">ASCII string to be copied</param> /// <param name="sourceIndex">Index on source string to start the copy</param> /// <param name="redisBuffer">The ProtocolBuffer to ASCII string to be copied</param> /// <param name="destinationIndex">Index on destination to start the copy</param> /// <param name="count">Count of ASCII chars to be copied from string</param> public static unsafe void ASCIICopyTo(this string str, int sourceIndex, RedisBuffer redisBuffer, int destinationIndex, int count) { fixed (char* pBytes = str) { var pSrc = pBytes; byte* pBuffer = redisBuffer.GetAddressFromIndex(destinationIndex); var pDest = pBuffer; var start = sourceIndex; var end = Math.Min(start + count, str.Length); // I would liked to evict this for loop for (var i = sourceIndex; i < end; i++) { *pDest = (byte)*pSrc; pDest++; pSrc++; } } }
private static int BulkString(RedisBuffer redisBuffer, int i, params int[] words) { foreach (var word in words) { redisBuffer.WriteByte(TYPE_BULK_STRINGS, i); i++; i += word.DigitsCount().FastToArrayByte(redisBuffer, i); redisBuffer.CopyFrom(CRLF, 0, i, CRLFLength); i += CRLFLength; i += word.FastToArrayByte(redisBuffer, i); redisBuffer.CopyFrom(CRLF, 0, i, CRLFLength); i += CRLFLength; } return i; }
/// <summary> /// Preenche o buffer com os caracteres representando o valor inteiro e retorna o número de dígitos que foi preenchido no buffer /// </summary> /// <param name="value">Valor inteiro maior que zero que será convertido para string</param> /// <param name="redisBuffer">Array de caracteres que conterá a representação char do valor numérico</param> /// <param name="startIndex">Posição inicial no buffer onde os caracteres serão colocados</param> /// <returns>A quantidade de dígitos que foram escritas no array indicado por buffer</returns> public static int FastToArrayByte(this int value, RedisBuffer redisBuffer, int startIndex) { var digits = value.DigitsCount(); startIndex += digits; while (value != 0) { var rem = value % 10; value /= 10; redisBuffer.WriteByte(CharsTable[rem], --startIndex); } return digits; }
private static int BulkString(RedisBuffer redisBuffer, int i, params byte[][] words) { foreach (var word in words) { redisBuffer.WriteByte(TYPE_BULK_STRINGS, i++); var wordLength = word.Length; i += wordLength.FastToArrayByte(redisBuffer, i); redisBuffer.CopyFrom(CRLF, 0, i, CRLFLength); i += CRLFLength; redisBuffer.CopyFrom(word, 0, i, wordLength); i += wordLength; redisBuffer.CopyFrom(CRLF, 0, i, CRLFLength); i += CRLFLength; } return i; }