Contents

ARST打卡第91周[91/521]

Algorithm

LeetCode/839_相似字符串组

Review

SERIALIZATION (ENCODE/DECODE)

Tips

Python结合OpenCV视频处理、逐帧修改图片

Share

Ceph的encoding宏定义妙用

  1. 宏定义do_while(false)套娃
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#define ENCODE_START(A) \
    int a = A;      \
    printf("hello a=%d\n", a); \
    do {

// 这中间还套娃了很多层do,while,这是我没有想到了

#define DECODE_FINISH() \
    } while(false);

int main() {
    cout << "hello world" << endl;
    ENCODE_START(100)
    DECODE_FINISH()
    return 0;
}
  1. 震惊宏定义缩短定义的方法
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// -----------------------------------
// int types

#define WRITE_INTTYPE_ENCODER(type, etype)				\
  inline void encode(type v, bufferlist& bl, uint64_t features=0) {	\
    ceph_##etype e;					                \
    e = v;                                                              \
    encode_raw(e, bl);							\
  }									\
  inline void decode(type &v, bufferlist::iterator& p) {		\
    ceph_##etype e;							\
    decode_raw(e, p);							\
    v = e;								\
  }

WRITE_INTTYPE_ENCODER(uint64_t, le64)
WRITE_INTTYPE_ENCODER(int64_t, le64)
WRITE_INTTYPE_ENCODER(uint32_t, le32)
WRITE_INTTYPE_ENCODER(int32_t, le32)
WRITE_INTTYPE_ENCODER(uint16_t, le16)
WRITE_INTTYPE_ENCODER(int16_t, le16)