关键词搜索

源码搜索 ×
×

漫话Redis源码之二

发布2021-11-21浏览907次

详情内容

看了一下,zipmapDecodeLength的实现还挺巧妙的,直接使用内存操作:

  1. /* Decode the encoded length pointed by 'p' */
  2. static unsigned int zipmapDecodeLength(unsigned char *p) {
  3. unsigned int len = *p;
  4. if (len < ZIPMAP_BIGLEN) return len;
  5. memcpy(&len,p+1,sizeof(unsigned int));
  6. memrev32ifbe(&len);
  7. return len;
  8. }
  9. static unsigned int zipmapGetEncodedLengthSize(unsigned char *p) {
  10. return (*p < ZIPMAP_BIGLEN) ? 1: 5;
  11. }
  12. /* Encode the length 'l' writing it in 'p'. If p is NULL it just returns
  13. * the amount of bytes required to encode such a length. */
  14. static unsigned int zipmapEncodeLength(unsigned char *p, unsigned int len) {
  15. if (p == NULL) {
  16. return ZIPMAP_LEN_BYTES(len);
  17. } else {
  18. if (len < ZIPMAP_BIGLEN) {
  19. p[0] = len;
  20. return 1;
  21. } else {
  22. p[0] = ZIPMAP_BIGLEN;
  23. memcpy(p+1,&len,sizeof(len));
  24. memrev32ifbe(p+1);
  25. return 1+sizeof(len);
  26. }
  27. }
  28. }

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载