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; }